Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Dichiarazione 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'

APPENDICE

L'estensione XML in SQL-Server consente di concatenare più righe in un'unica riga. L'intenzione reale dell'estensione è che tu possa emettere come XML (ovviamente), ma ci sono alcuni trucchi ingegnosi che sono sottoprodotti delle estensioni. Nella query precedente, se nella sottoquery fosse presente un nome di colonna (FullName), verrebbe restituito come <FullName>Joe Bloggs1</FullName><FullName>Joe Bloggs2</FullName> , poiché non esiste un nome di colonna, concatena semplicemente le righe (non formando un XML corretto). Il PATH parte ti consente di specificare un nodo aggiuntivo, ad esempio se usi PATH('Name') in quanto sopra otterrai <Name>;Joe Bloggs</Name><Name>;Joe Bloggs2</Name> Se combini Path con il nome di una colonna otterrai Joe Bloggs.

Infine il STUFF rimuove semplicemente il punto e virgola all'inizio dell'elenco.