sql >> Base de Datos >  >> RDS >> Sqlserver

¿Declaración 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'

ANEXO

La extensión XML en SQL-Server le permite concatenar varias filas en una sola fila. La intención real de la extensión es que pueda generar una salida como XML (obviamente), pero hay algunos trucos ingeniosos que son subproductos de las extensiones. En la consulta anterior, si hubiera un nombre de columna en la subconsulta (FullName), se generaría como <FullName>Joe Bloggs1</FullName><FullName>Joe Bloggs2</FullName> , debido a que no hay un nombre de columna, simplemente concatena las filas (sin formar el XML adecuado). El PATH part le permite especificar un nodo adicional, por ejemplo, si usa PATH('Nombre') en lo anterior, obtendría <Name>;Joe Bloggs</Name><Name>;Joe Bloggs2</Name> Si combina Ruta con un nombre de columna, obtendrá Joe Bloggs.

Finalmente las STUFF simplemente elimina el punto y coma al comienzo de la lista.