Begini cara kerjanya:
1. Dapatkan string elemen XML dengan FOR XML
Menambahkan FOR XML PATH ke akhir kueri memungkinkan Anda untuk menampilkan hasil kueri sebagai elemen XML, dengan nama elemen yang terkandung dalam argumen PATH. Misalnya, jika kita menjalankan pernyataan berikut:
SELECT ',' + name
FROM temp1
FOR XML PATH ('')
Dengan meneruskan string kosong (UNTUK XML PATH('')), kita mendapatkan yang berikut sebagai gantinya:
,aaa,bbb,ccc,ddd,eee
2. Hapus koma di depan dengan STUFF
Pernyataan STUFF secara harfiah "mengisi" satu string ke string lain, menggantikan karakter dalam string pertama. Namun, kami menggunakannya hanya untuk menghapus karakter pertama dari daftar nilai yang dihasilkan.
SELECT abc = STUFF((
SELECT ',' + NAME
FROM temp1
FOR XML PATH('')
), 1, 1, '')
FROM temp1
Parameter STUFF
adalah:
- String yang akan "diisi" (dalam kasus kami daftar lengkap nama dengan koma di depan)
- Lokasi untuk mulai menghapus dan menyisipkan karakter (1, kita memasukkan string kosong)
- Jumlah karakter yang akan dihapus (1, koma di depan)
Jadi kita berakhir dengan:
aaa,bbb,ccc,ddd,eee
3. Bergabunglah di id untuk mendapatkan daftar lengkap
Selanjutnya kita gabung saja ini pada daftar id di tabel temp, untuk mendapatkan daftar ID dengan nama:
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;
Dan kami mendapatkan hasil kami:
Semoga membantu!