Mengagregatkan Data dengan Rentetan Dipisahkan Koma dalam Pelayan SQL
KlausaSQL Server GROUP BY
sangat baik untuk pengagregatan data. Tetapi bagaimanakah anda menggabungkan berbilang nilai daripada baris terkumpul menjadi rentetan tunggal yang dipisahkan koma?
Cabaran:
Bayangkan jadual seperti ini:
<code>ID ReportId Email 1 1 a@domain.com 2 2 b@domain.com 3 1 c@domain.com 4 3 d@domain.com 5 3 e@domain.com</code>
Matlamatnya adalah untuk mengumpulkan mengikut ReportId
dan menggabungkan e-mel ke dalam senarai yang dipisahkan koma untuk setiap laporan.
Penyelesaian: Subquery dan UNTUK LALUAN XML
Berikut ialah cara untuk mencapai ini menggunakan subquery dan kaedah FOR XML PATH
:
<code class="language-sql">SELECT ReportId, Email = STUFF((SELECT ', ' + Email FROM table_name b WHERE b.ReportId = a.ReportId FOR XML PATH('')), 1, 2, '') FROM table_name a GROUP BY ReportId;</code>
Penjelasan:
SELECT
dalaman mendapatkan semula semua e-mel yang dikaitkan dengan ReportId
tertentu.''
memastikan tiada nod induk dibuat.STUFF
mengalih keluar koma di hadapan dan ruang yang ditambahkan oleh pernyataan SELECT
, menghasilkan rentetan yang dipisahkan koma yang bersih.Keputusan:
Pertanyaan akan menghasilkan output berikut:
<code>ReportId Email 1 a@domain.com, c@domain.com 2 b@domain.com 3 d@domain.com, e@domain.com</code>
Ini menggabungkan berbilang alamat e-mel dengan berkesan menjadi satu rentetan dipisahkan koma untuk setiap ReportId
. Walaupun pendekatan ini berfungsi dengan baik, pertimbangkan untuk meneroka fungsi khusus pangkalan data lain seperti STRING_AGG
(tersedia dalam versi SQL Server kemudian) untuk penyelesaian yang berpotensi lebih cekap.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggabungkan Berbilang Nilai ke dalam Rentetan Dipisahkan Koma Menggunakan GROUP BY dalam SQL Server?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!