Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Instrukcja SQL 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'

UZUPEŁNIENIE

Rozszerzenie XML w SQL-Server umożliwia łączenie wielu wierszy w jeden. Rzeczywistą intencją rozszerzenia jest możliwość wyprowadzania jako XML (oczywiście), ale jest kilka fajnych sztuczek, które są produktami ubocznymi rozszerzeń. W powyższym zapytaniu, jeśli w podzapytaniu była nazwa kolumny (FullName), zostanie ona wyprowadzona jako Joe Bloggs1Joe Bloggs2 , ponieważ nie ma nazwy kolumny, po prostu łączy wiersze (nie tworząc poprawnego XML). PATH part pozwala określić dodatkowy węzeł, na przykład jeśli użyjesz PATH('Name') w powyższym, otrzymasz ;Joe Bloggs;Joe Bloggs2 Jeśli połączysz ścieżkę z nazwą kolumny, otrzymasz Joe Bloggs.

Wreszcie STUFF po prostu usuwa średnik na początku listy.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. W jaki sposób indeks nieklastrowy może wyprowadzać kolumnę, która nie jest uwzględniona w indeksie?

  2. Czy można ustawić domyślny schemat z ciągu połączenia?

  3. Jak usunąć wszystkie zależne wiersze

  4. Czy są jakieś wady, aby zawsze używać nvarchar(MAX)?

  5. Rekord tabeli nadrzędny podrzędny — budowanie zapytania SQL