Oto jak to działa:
1. Pobierz ciąg elementów XML za pomocą FOR XML
Dodanie FOR XML PATH na końcu zapytania umożliwia wyświetlanie wyników zapytania jako elementów XML z nazwą elementu zawartą w argumencie PATH. Na przykład, gdybyśmy mieli uruchomić następującą instrukcję:
SELECT ',' + name
FROM temp1
FOR XML PATH ('')
Przekazując pusty ciąg (FOR XML PATH('')), zamiast tego otrzymujemy:
,aaa,bbb,ccc,ddd,eee
2. Usuń początkowy przecinek za pomocą STUFF
Instrukcja STUFF dosłownie „wpycha” jeden ciąg do drugiego, zastępując znaki w pierwszym ciągu. My jednak używamy go po prostu do usunięcia pierwszego znaku z wynikowej listy wartości.
SELECT abc = STUFF((
SELECT ',' + NAME
FROM temp1
FOR XML PATH('')
), 1, 1, '')
FROM temp1
Parametry STUFF
są:
- Ciąg, który ma zostać „wypchany” (w naszym przypadku pełna lista nazwisk z początkowym przecinkiem)
- Lokalizacja do rozpoczęcia usuwania i wstawiania znaków (1, wpychamy do pustego ciągu)
- Liczba znaków do usunięcia (1, jako wiodący przecinek)
W efekcie otrzymujemy:
aaa,bbb,ccc,ddd,eee
3. Dołącz na id, aby uzyskać pełną listę
Następnie dołączamy do tego na liście identyfikatorów w tabeli tymczasowej, aby uzyskać listę identyfikatorów o nazwie:
SELECT ID, abc = STUFF(
(SELECT ',' + name
FROM temp1 t1
WHERE t1.id = t2.id
FOR XML PATH (''))
, 1, 1, '') from temp1 t2
group by id;
I mamy nasz wynik:
Mam nadzieję, że to pomoże!
-
Zmień typy kolumn w ogromnej tabeli
-
wybierz * z tabeli vs wybierz colA, colB, itp. z tabeli ciekawe zachowanie w SQL Server 2005
-
Zmień priorytet konta w profilu poczty bazy danych (SSMS)
-
Jak wygenerować losową liczbę dla każdego wiersza w zaznaczeniu T-SQL?
-
Konwertuj „datetime” na „smalldatetime” w SQL Server (przykłady T-SQL)