SQL CONCAT IF оператор? - PullRequest
       22

SQL CONCAT IF оператор?

1 голос
/ 12 марта 2012

Утро всем,

Я не уверен, как мне решить мой следующий запрос ... У меня есть следующий запрос, который возвращает нужные записи в SQL-сервере ...

SELECT agenda.AgendaItemNumber,Agenda.AgendaName, AgendaType.AgendaTypeDescription, userdetails.fullName 
FROM Agenda
JOIN AgendaType ON AgendaType.AgendaTypeID=Agenda.AgendaTypeID
JOIN UserDetails ON Agenda.AgendaID = Userdetails.AgendaID
WHERE agenda.AgendaTypeID = '2'
AND AgendaItemNumber = AgendaItemNumber
AND AgendaName = AgendaName
AND AgendaTypeDescription = AgendaTypeDescription
AND AgendaItemNumber >= '3'

Приведенный выше запрос работает, но мне нужно немного его улучшить. Он возвращает следующие результаты, которые по сути являются дублирующими записями, за исключением столбца «полное имя» ...

Results_image

Что я хотел бы сделать, так это иметь возможность добавить дополнительный код к этому запросу, чтобы при запуске запроса я мог отображать одну запись для каждого «AgendaItemNumber» и объединять оба полных имени этого запись. Однако у меня есть дополнительные AgendaItemsNumbers в этой таблице, которые имеют только 1 х полное имя пользователя, назначенного им. Мне нужны только эти несколько записей в файле изображения.

Может быть, есть лучший способ выполнить эту задачу?

Большое спасибо заранее. Любые вопросы, пожалуйста, не стесняйтесь спрашивать.

С уважением Betty

1 Ответ

4 голосов
/ 12 марта 2012
SELECT  agenda.AgendaItemNumber,
        Agenda.AgendaName, 
        AgendaType.AgendaTypeDescription, 
        STUFF(( SELECT  ';' + FullName 
                FROM    UserDetails
                WHERE   UserDetails.AgendaID = Agenda.AgendaID
                FOR XML PATH('')
            ), 1, 1, '') AS fullName 
FROM    Agenda
        INNER JOIN AgendaType 
            ON AgendaType.AgendaTypeID=Agenda.AgendaTypeID
        INNER JOIN UserDetails 
            ON Agenda.AgendaID = Userdetails.AgendaID
WHERE   agenda.AgendaTypeID = '2'
AND     AgendaItemNumber = AgendaItemNumber
AND     AgendaName = AgendaName
AND     AgendaTypeDescription = AgendaTypeDescription
AND     AgendaItemNumber >= '3'

ADENDUM

Расширение XML в SQL-Server позволяет объединять несколько строк в одну строку. Фактическое намерение расширения состоит в том, чтобы вы могли выводить его в формате XML (очевидно), но есть некоторые хитрые уловки, которые являются побочными продуктами расширений. В приведенном выше запросе, если бы в подзапросе было имя столбца (FullName), он вывел бы как <FullName>Joe Bloggs1</FullName><FullName>Joe Bloggs2</FullName>, потому что нет имени столбца, он просто объединяет строки (не формируя правильный XML). Часть PATH позволяет вам указать дополнительный узел, например, если вы используете PATH ('Name') в приведенном выше, вы получите <Name>;Joe Bloggs</Name><Name>;Joe Bloggs2</Name> Если вы объедините Path с именем столбца, вы получите Joe Bloggs.

Наконец, STUFF просто удаляет точку с запятой в начале списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...