Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Instrução 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'

ADENDO

A extensão XML no SQL-Server permite concatenar várias linhas em uma única linha. A intenção real da extensão é que você possa produzir como XML (obviamente), mas existem alguns truques bacanas que são subprodutos das extensões. Na consulta acima, se houvesse um nome de coluna na subconsulta (FullName), seria gerado como Joe Bloggs1Joe Bloggs2 , porque não há nome de coluna, ele simplesmente concatena as linhas (não formando XML adequado). O CAMINHO parte permite que você especifique um nó adicional, por exemplo, se você usar PATH('Name') acima, você obterá ;Joe Bloggs;Joe Bloggs2 Se você combinar Path com um nome de coluna, obterá Joe Bloggs.

Finalmente o COISA apenas remove o ponto e vírgula no início da lista.