Jika Anda menggunakan SQL Server 2017 atau Azure, lihat jawaban Mathieu Renda.
Saya memiliki masalah serupa ketika saya mencoba menggabungkan dua tabel dengan hubungan satu-ke-banyak. Dalam SQL 2005 saya menemukan bahwa XML PATH
metode ini dapat menangani penggabungan baris dengan sangat mudah.
Jika ada tabel bernama STUDENTS
SubjectID StudentName
---------- -------------
1 Mary
1 John
1 Sam
2 Alaina
2 Edward
Hasil yang saya harapkan adalah:
SubjectID StudentName
---------- -------------
1 Mary, John, Sam
2 Alaina, Edward
Saya menggunakan T-SQL
berikut ini :
SELECT Main.SubjectID,
LEFT(Main.Students,Len(Main.Students)-1) As "Students"
FROM
(
SELECT DISTINCT ST2.SubjectID,
(
SELECT ST1.StudentName + ',' AS [text()]
FROM dbo.Students ST1
WHERE ST1.SubjectID = ST2.SubjectID
ORDER BY ST1.SubjectID
FOR XML PATH ('')
) [Students]
FROM dbo.Students ST2
) [Main]
Anda dapat melakukan hal yang sama dengan cara yang lebih ringkas jika Anda dapat menggabungkan koma di awal dan menggunakan substring
untuk melewati yang pertama sehingga Anda tidak perlu melakukan sub-kueri:
SELECT DISTINCT ST2.SubjectID,
SUBSTRING(
(
SELECT ','+ST1.StudentName AS [text()]
FROM dbo.Students ST1
WHERE ST1.SubjectID = ST2.SubjectID
ORDER BY ST1.SubjectID
FOR XML PATH ('')
), 2, 1000) [Students]
FROM dbo.Students ST2