sql >> Database >  >> RDS >> Sqlserver

SQL CONCAT IF-instructie?

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

Met de XML-extensie in SQL-Server kunt u meerdere rijen samenvoegen tot één rij. De eigenlijke bedoeling van de extensie is dat je deze als XML kunt uitvoeren (uiteraard), maar er zijn enkele handige trucs die bijproducten zijn van de extensies. Als er in de bovenstaande query een kolomnaam in de subquery (FullName) was, zou deze worden uitgevoerd als <FullName>Joe Bloggs1</FullName><FullName>Joe Bloggs2</FullName> , omdat er geen kolomnaam is, voegt het eenvoudig de rijen samen (geen juiste XML). Het PATH deel stelt u in staat een extra knooppunt op te geven, bijvoorbeeld als u PATH('Naam') gebruikt in het bovenstaande, krijgt u <Name>;Joe Bloggs</Name><Name>;Joe Bloggs2</Name> Als je Pad combineert met een kolomnaam, krijg je Joe Bloggs.

Eindelijk de STUFF verwijdert gewoon de puntkomma aan het begin van de lijst.




  1. De symbolen waar ik op moet letten voor SQL-injectie

  2. De huidige waarde en de vorige waarde tussen het datumbereik afdrukken

  3. OR wordt niet ondersteund met CASE-instructie in SQL Server

  4. Hoe een externe sleutel in SQLite te laten vallen