sql >> Database teknologi >  >> RDS >> Sqlserver

SQL CONCAT IF-erklæring?

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-udvidelsen i SQL-Server giver dig mulighed for at sammenkæde flere rækker i en enkelt række. Den egentlige hensigt med udvidelsen er, at du kan udskrive som XML (naturligvis), men der er nogle smarte tricks, der er biprodukter af udvidelserne. I ovenstående forespørgsel, hvis der var et kolonnenavn i underforespørgslen (FullName), ville det udsendes som Joe Bloggs1Joe Bloggs2 , fordi der ikke er noget kolonnenavn, sammenkæder den blot rækkerne (danner ikke korrekt XML). PATH del giver dig mulighed for at angive en ekstra node, for eksempel hvis du bruger PATH('Navn') i ovenstående vil du få ;Joe Bloggs;Joe Bloggs2 Hvis du kombinerer Path med et kolonnenavn, får du Joe Bloggs.

Til sidst STUFF fjerner bare semikolon i starten af ​​listen.




  1. SQL Server 2008 Kører trigger efter Insert, Update låser den oprindelige tabel

  2. vælg forespørgsel i dvale med where-sætning

  3. Oprettelse af MYSQL-procedure i Laravel 4-migreringer

  4. ORA-01264 i fysisk standby