Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL CONCAT IF-Anweisung?

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'

Nachtrag

Die XML-Erweiterung in SQL-Server ermöglicht es Ihnen, mehrere Zeilen zu einer einzigen Zeile zu verketten. Die eigentliche Absicht der Erweiterung ist, dass Sie (offensichtlich) als XML ausgeben können, aber es gibt einige raffinierte Tricks, die Nebenprodukte der Erweiterungen sind. Wenn in der obigen Abfrage ein Spaltenname in der Unterabfrage (FullName) vorhanden wäre, würde dieser als <FullName>Joe Bloggs1</FullName><FullName>Joe Bloggs2</FullName> ausgegeben , da es keinen Spaltennamen gibt, werden die Zeilen einfach verkettet (kein richtiges XML). Der PATH part ermöglicht es Ihnen, einen zusätzlichen Knoten anzugeben, wenn Sie beispielsweise PATH('Name') oben verwenden, erhalten Sie <Name>;Joe Bloggs</Name><Name>;Joe Bloggs2</Name> Wenn Sie Pfad mit einem Spaltennamen kombinieren, erhalten Sie Joe Bloggs.

Schließlich das STUFF entfernt nur das Semikolon am Anfang der Liste.