sql >> Databasteknik >  >> RDS >> Sqlserver

SQL CONCAT IF-sats?

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

XML-tillägget i SQL-Server låter dig sammanfoga flera rader till en enda rad. Den faktiska avsikten med tillägget är att du kan mata ut som XML (uppenbarligen), men det finns några fiffiga knep som är biprodukter av tilläggen. I ovanstående fråga, om det fanns ett kolumnnamn i underfrågan (FullName) skulle det matas ut som Joe Bloggs1Joe Bloggs2 , eftersom det inte finns något kolumnnamn sammanfogar det helt enkelt raderna (inte bildar korrekt XML). PATH del låter dig ange en extra nod, till exempel om du använder PATH('Name') i ovanstående skulle du få ;Joe Bloggs;Joe Bloggs2 Om du kombinerar Path med ett kolumnnamn får du Joe Bloggs.

Slutligen STUFF tar bara bort semikolonet i början av listan.




  1. Infoga ett flyttal i en tabell med hjälp av libpq

  2. Hur man hämtar värden från en normaliserad MySQL 5.7-struktur som matchar vissa kriterier

  3. MySQL - välj alla objekt med flera hashtags

  4. Hämta hierarki från en tabell som denna