Funguje to takto:
1. Získejte řetězec prvků XML pomocí FOR XML
Přidání FOR XML PATH na konec dotazu vám umožní výstup výsledků dotazu jako prvků XML s názvem prvku obsaženým v argumentu PATH. Pokud bychom například spustili následující příkaz:
SELECT ',' + name
FROM temp1
FOR XML PATH ('')
Předáním prázdného řetězce (FOR XML PATH('')) získáme místo toho následující:
,aaa,bbb,ccc,ddd,eee
2. Odstraňte úvodní čárku pomocí STUFF
Příkaz STUFF doslova "nacpe" jeden řetězec do druhého a nahradí znaky v prvním řetězci. My jej však používáme pouze k odstranění prvního znaku z výsledného seznamu hodnot.
SELECT abc = STUFF((
SELECT ',' + NAME
FROM temp1
FOR XML PATH('')
), 1, 1, '')
FROM temp1
Parametry STUFF
jsou:
- Řetězec, který má být „vyplněn“ (v našem případě úplný seznam jmen s úvodní čárkou)
- Místo pro zahájení mazání a vkládání znaků (1, vkládáme do prázdného řetězce)
- Počet znaků k odstranění (1, což je úvodní čárka)
Takže skončíme s:
aaa,bbb,ccc,ddd,eee
3. Připojte se na ID a získejte úplný seznam
Dále se k tomu připojíme na seznamu ID v dočasné tabulce, abychom získali seznam ID s názvem:
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;
A máme výsledek:
Doufám, že to pomůže!