Sambungan Teks Berbilang Baris Pelayan SQL: Kaedah XML PATH
Keperluan untuk menggabungkan berbilang baris data teks ke dalam satu rentetan adalah perkara biasa. Sebagai contoh, terdapat jadual yang mengandungi nama:
<code>Peter Paul Mary</code>
Matlamatnya adalah untuk menukar ini menjadi rentetan bersatu: "Peter, Paul, Mary".
Untuk pengguna SQL Server 2017 atau Azure, pertimbangkan penyelesaian yang disediakan oleh Mathieu Renda. Walau bagaimanapun, untuk versi terdahulu (seperti SQL 2005), kaedah XML PATH menyediakan kaedah yang cekap untuk tugas sambungan ini.
Berikut ialah contoh jadual yang dipanggil PELAJAR:
SubjectID | StudentName |
---|---|
1 | Mary |
1 | John |
1 | Sam |
2 | Alaina |
2 | Edward |
Output yang diingini ialah:
SubjectID | StudentName |
---|---|
1 | Mary, John, Sam |
2 | Alaina, Edward |
Untuk mencapai ini, gunakan kod T-SQL berikut:
<code class="language-sql">SELECT Main.SubjectID, LEFT(Main.Students,Len(Main.Students)-1) As "Students" FROM ( SELECT ST2.SubjectID, ( SELECT ST1.StudentName + ',' AS [text()] FROM dbo.Students ST1 WHERE ST1.SubjectID = ST2.SubjectID ORDER BY ST1.SubjectID FOR XML PATH (''), TYPE ).value('text()[1]','nvarchar(max)') [Students] FROM dbo.Students ST2 GROUP BY ST2.SubjectID ) [Main]</code>
Pertanyaan ini mendapatkan semula SubjectID dan nilai StudentName yang digabungkan dan menghilangkan koma di belakang daripada rentetan hasil.
Sebagai alternatif, anda boleh menggunakan pendekatan yang lebih bersih dengan menggabungkan koma pada permulaan dan menggunakan STUFF untuk mengalih keluar koma pertama:
<code class="language-sql">SELECT ST2.SubjectID, STUFF( ( SELECT ',' + ST1.StudentName AS [text()] FROM dbo.Students ST1 WHERE ST1.SubjectID = ST2.SubjectID ORDER BY ST1.SubjectID FOR XML PATH (''), TYPE ).value('text()[1]','nvarchar(max)'), 1, 1, '') [Students] FROM dbo.Students ST2 GROUP BY ST2.SubjectID</code>
Atas ialah kandungan terperinci Bagaimana untuk Menggabungkan Teks dari Berbilang Baris Pelayan SQL ke dalam Rentetan Tunggal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!