Rumah >pangkalan data >tutorial mysql >Bagaimanakah `STUFF` dan `FOR XML PATH` Menggabungkan Nama dalam SQL Server untuk ID Pendua?
Panduan ini menunjukkan cara menggabungkan berbilang nama yang dikaitkan dengan ID pendua dalam jadual SQL Server, menghasilkan senarai nama yang dipisahkan koma untuk setiap ID unik. Kami akan mencapai ini menggunakan gabungan hebat STUFF
dan FOR XML PATH
.
Senario:
Bayangkan jadual dengan ID pendua dan nama yang sepadan. Matlamatnya ialah untuk membuat lajur baharu yang mengandungi semua nama bagi setiap ID, dipisahkan dengan kemas dengan koma.
Penyelesaian:
Penyelesaian menggunakan proses tiga langkah:
Langkah 1: Menjana Rentetan XML Dipisahkan Koma
Inti penyelesaian terletak pada memanfaatkan FOR XML PATH('')
untuk menjana rentetan yang dipisahkan koma daripada nama.
<code class="language-sql">SELECT ',' + name FROM temp1 FOR XML PATH('')</code>
Ini menjana rentetan XML dengan setiap nama didahului dengan koma.
Langkah 2: Mengalih keluar Koma Utama
Rentetan XML yang terhasil daripada Langkah 1 bermula dengan koma yang tidak diperlukan. STUFF
mengalih keluar ini dengan elegan.
<code class="language-sql">STUFF( (SELECT ',' + name FROM temp1 FOR XML PATH('')), 1, 1, '' )</code>
STUFF
menggantikan aksara pertama (koma utama) dengan rentetan kosong.
Langkah 3: Menyertai, Menghimpun dan Keputusan Akhir
Akhir sekali, kami menggabungkan langkah di atas dengan klausa JOIN
dan GROUP BY
untuk mencapai hasil yang diingini.
<code class="language-sql">SELECT ID, ConcatenatedNames = STUFF( (SELECT ',' + name FROM temp1 t1 WHERE t1.id = t2.id FOR XML PATH ('')) , 1, 1, '') FROM temp1 t2 GROUP BY id;</code>
Pertanyaan ini menyertai subkueri (yang menjana rentetan dipisahkan koma) dengan jadual asal (temp1
) berdasarkan ID
. Klausa GROUP BY
memastikan bahawa penggabungan berlaku untuk setiap ID unik. Lajur ConcatenatedNames
yang terhasil mengandungi senarai nama yang dipisahkan koma untuk setiap ID.
Atas ialah kandungan terperinci Bagaimanakah `STUFF` dan `FOR XML PATH` Menggabungkan Nama dalam SQL Server untuk ID Pendua?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!