So funktioniert es:
1. XML-Element-String mit FOR XML abrufen
Durch Hinzufügen von FOR XML PATH am Ende einer Abfrage können Sie die Ergebnisse der Abfrage als XML-Elemente ausgeben, wobei der Elementname im PATH-Argument enthalten ist. Wenn wir zum Beispiel die folgende Anweisung ausführen würden:
SELECT ',' + name
FROM temp1
FOR XML PATH ('')
Indem wir eine leere Zeichenfolge (FOR XML PATH('')) übergeben, erhalten wir stattdessen Folgendes:
,aaa,bbb,ccc,ddd,eee
2. Entfernen Sie das führende Komma mit STUFF
Die STUFF-Anweisung "stopft" buchstäblich einen String in einen anderen und ersetzt Zeichen innerhalb des ersten Strings. Wir verwenden sie jedoch einfach, um das erste Zeichen der resultierenden Werteliste zu entfernen.
SELECT abc = STUFF((
SELECT ',' + NAME
FROM temp1
FOR XML PATH('')
), 1, 1, '')
FROM temp1
Die Parameter von STUFF
sind:
- Die Zeichenfolge, die „gestopft“ werden soll (in unserem Fall die vollständige Namensliste mit führendem Komma)
- Die Stelle, an der mit dem Löschen und Einfügen von Zeichen begonnen werden soll (1, wir stopfen in eine leere Zeichenfolge)
- Die Anzahl der zu löschenden Zeichen (1 als führendes Komma)
Also enden wir mit:
aaa,bbb,ccc,ddd,eee
3. Treten Sie der ID bei, um die vollständige Liste zu erhalten
Als nächstes fügen wir dies einfach in die Liste der IDs in der temporären Tabelle ein, um eine Liste der IDs mit dem Namen zu erhalten:
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;
Und wir haben unser Ergebnis:
Hoffe, das hilft!