Rumah >pangkalan data >tutorial mysql >Bagaimanakah `STUFF` dan `FOR XML PATH` Menggabungkan Nama dalam SQL Server untuk ID Pendua?

Bagaimanakah `STUFF` dan `FOR XML PATH` Menggabungkan Nama dalam SQL Server untuk ID Pendua?

DDD
DDDasal
2025-01-22 22:52:14949semak imbas

How Do `STUFF` and `FOR XML PATH` Concatenate Names in SQL Server for Duplicate IDs?

SQL Server: Menggabungkan Nama untuk ID Pendua menggunakan STUFF dan FOR XML PATH

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn