首頁 >資料庫 >mysql教程 >如何根據 ID 將多個標籤連接成一行?

如何根據 ID 將多個標籤連接成一行?

Susan Sarandon
Susan Sarandon原創
2024-12-30 21:52:10801瀏覽

How to Concatenate Multiple Labels into a Single Row Based on ID?

根據ID 連接值

此問題旨在將每個ID 具有多行和單個「標籤」列的表轉換為每個ID 一行和一個串聯的「標籤」欄位的表。每個標籤應以逗號分隔。

提供的資料由以下觀察組成:

Response_ID Label
12147 It was not clear
12458 Did not Undersstand
12458 Was not resolved
12458 Did not communicate
12586 Spoke too fast
12587 Too slow

所需的輸出是:

Response_ID Label
12147 It was not clear
12458 Did not Undersstand,Was not resolved,Did not communicate
12586 Spoke too fast
12587 Too Slow

實現此轉換,可以使用以下程式碼片段:

declare @T table(Response_ID int, Label varchar(50))
insert into @T values
(12147,          'It was not clear'),
(12458,          'Did not Undersstand'),
(12458,          'Was not resolved'),
(12458,          'Did not communicate'),
(12586,          'Spoke too fast'),
(12587,          'Too slow')

select T1.Response_ID,
       stuff((select ','+T2.Label
              from @T as T2
              where T1.Response_ID = T2.Response_ID
              for xml path(''), type).value('.', 'varchar(max)'), 1, 1, '') as Label
from @T as T1
group by T1.Response_ID

'stuff'函數中的子查詢使用串聯通過''操作符和XML方法來處理標籤的組合。 'type' 參數的 'value' 函數將 XML 輸出轉換為 varchar(max) 類型,以確保串聯結果的正確顯示。

請注意,如果子查詢中沒有 order by 語句,則串聯結果的順序無法保證字串。

以上是如何根據 ID 將多個標籤連接成一行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn