Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Instruction SQL CONCAT IF ?

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

L'extension XML dans SQL-Server vous permet de concaténer plusieurs lignes en une seule ligne. L'intention réelle de l'extension est de pouvoir sortir en XML (évidemment), mais il existe quelques astuces astucieuses qui sont des sous-produits des extensions. Dans la requête ci-dessus, s'il y avait un nom de colonne dans la sous-requête (FullName), le résultat serait <FullName>Joe Bloggs1</FullName><FullName>Joe Bloggs2</FullName> , car il n'y a pas de nom de colonne, il concatène simplement les lignes (ne formant pas le code XML approprié). Le PATH part vous permet de spécifier un nœud supplémentaire, par exemple si vous utilisez PATH('Name') dans ce qui précède, vous obtiendrez <Name>;Joe Bloggs</Name><Name>;Joe Bloggs2</Name> Si vous combinez Path avec un nom de colonne, vous obtiendrez Joe Bloggs.

Enfin le STUFF supprime simplement le point-virgule au début de la liste.