Mengagregatkan E-mel dalam Pelayan SQL: Penyelesaian KUMPULAN OLEH dan STUFF()
KlausaSQL Server GROUP BY
berkuasa untuk meringkaskan data. Tugas yang kerap adalah menggabungkan nilai berbilang baris ke dalam satu rentetan, selalunya dipisahkan koma. Ini dikendalikan dengan cekap menggunakan fungsi seperti STUFF()
.
Mari kita ilustrasikan dengan contoh jadual laporan pekerja:
ID | ReportId | |
---|---|---|
1 | 1 | john@example.com |
2 | 2 | mary@example.com |
3 | 1 | jane@example.com |
4 | 3 | david@example.com |
5 | 3 | susan@example.com |
Untuk menggabungkan e-mel yang dikaitkan dengan setiap ReportId
, menggunakan koma sebagai pemisah, pertanyaan ini berfungsi:
<code class="language-sql">SELECT ReportId, Email = STUFF((SELECT ', ' + Email FROM your_table b WHERE b.ReportId = a.ReportId FOR XML PATH('')), 1, 2, '') FROM your_table a GROUP BY ReportId;</code>
Fungsi STUFF()
mengubah suai rentetan. Ia memerlukan empat argumen: rentetan, kedudukan permulaan, bilangan aksara untuk dialih keluar dan rentetan gantian.
Kumpulan pertanyaan luar oleh ReportId
. Pertanyaan dalaman, menggunakan FOR XML PATH('')
, menggabungkan e-mel untuk setiap kumpulan. STUFF()
kemudian mengalih keluar koma dan ruang di hadapan.
Keluaran pertanyaan:
ReportId | |
---|---|
1 | john@example.com, jane@example.com |
2 | mary@example.com |
3 | david@example.com, susan@example.com |
Atas ialah kandungan terperinci Bagaimana untuk Menggabungkan E-mel oleh ReportId Menggunakan SQL Server GROUP BY dan STUFF()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!