sql >> Databáze >  >> RDS >> Sqlserver

SQL příkaz 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'

DODATEK

Rozšíření XML v SQL-Server umožňuje zřetězit více řádků do jednoho řádku. Skutečným záměrem rozšíření je, abyste jej mohli vydávat jako XML (samozřejmě), ale existuje několik šikovných triků, které jsou vedlejšími produkty rozšíření. Pokud by ve výše uvedeném dotazu byl v poddotazu název sloupce (FullName), vyšel by jako <FullName>Joe Bloggs1</FullName><FullName>Joe Bloggs2</FullName> , protože neexistuje žádný název sloupce, jednoduše zřetězí řádky (nevytvoří správné XML). PATH část vám umožňuje zadat další uzel, například pokud použijete PATH('Name') ve výše uvedeném, získáte <Name>;Joe Bloggs</Name><Name>;Joe Bloggs2</Name> Pokud zkombinujete cestu s názvem sloupce, získáte Joe Bloggs.

Nakonec STUFF pouze odstraní středník na začátku seznamu.




  1. Příkaz směrodatné odchylky v SQL

  2. alter table add ... před `code`?

  3. Proč tato chyba migrace databáze po upgradu verze django-mptt?

  4. Spuštění programu Java z příkazového řádku systému Linux, který vyžaduje další soubor