Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menggabungkan Berbilang Baris Pelayan SQL ke dalam Lajur Dibatasi Koma Tunggal?

Bagaimana untuk Menggabungkan Berbilang Baris Pelayan SQL ke dalam Lajur Dibatasi Koma Tunggal?

Barbara Streisand
Barbara Streisandasal
2025-01-21 07:02:361050semak imbas

How to Combine Multiple SQL Server Rows into a Single Comma-Delimited Column?

Gabungkan berbilang baris ke dalam satu lajur nilai dipisahkan koma dalam SQL Server

Soalan:

Anda perlu menggabungkan berbilang baris dengan pengecam biasa ke dalam satu lajur, di mana nilai dipisahkan dengan koma. Contohnya, anda ingin mendapatkan data daripada:

<code>[TicketID]  [Person]
T0001       Alice
T0001       Bob
T0002       Catherine
T0002       Doug
T0003       Elaine</code>

Tukar kepada:

<code>[TicketID]  [People]
T0001       Alice, Bob
T0002       Catherine, Doug
T0003       Elaine</code>

Penyelesaian untuk SQL Server 2005:

  1. Gunakan fungsi STUFF untuk menggabungkan nilai ke dalam satu rentetan:
<code class="language-sql">STUFF(ISNULL((SELECT ', ' + x.Person
                FROM @Tickets x
               WHERE x.TicketID = t.TicketID
            GROUP BY x.Person
             FOR XML PATH (''), TYPE).value('.','VARCHAR(max)'), ''), 1, 2, '')</code>
  1. Klausa FOR XML PATH mengumpulkan nilai dan mengembalikannya sebagai rentetan XML.
  2. Klausa
  3. TYPE menyatakan bahawa hasilnya mestilah rentetan teks.
  4. Fungsi nilai
  5. mengekstrak teks daripada rentetan XML.
  6. Fungsi ISNULL mengendalikan kes di mana tiada nilai untuk digabungkan.
  7. Fungsi STUFF terakhir mengalih keluar koma di hadapan daripada rentetan gabungan, jika ada.

Contoh pertanyaan:

<code class="language-sql">SELECT t.TicketID,
       STUFF(ISNULL((SELECT ', ' + x.Person
                FROM @Tickets x
               WHERE x.TicketID = t.TicketID
            GROUP BY x.Person
             FOR XML PATH (''), TYPE).value('.','VARCHAR(max)'), ''), 1, 2, '') [无前导逗号],
       ISNULL((SELECT ', ' + x.Person
                FROM @Tickets x
               WHERE x.TicketID = t.TicketID
            GROUP BY x.Person
             FOR XML PATH (''), TYPE).value('.','VARCHAR(max)'), '') [如果非空则有前导逗号]
  FROM @Tickets t
GROUP BY t.TicketID</code>

Atas ialah kandungan terperinci Bagaimana untuk Menggabungkan Berbilang Baris Pelayan SQL ke dalam Lajur Dibatasi Koma Tunggal?. 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