首頁 > 資料庫 > mysql教程 > 如何在 SQL 中將多行連接成單一字串?

如何在 SQL 中將多行連接成單一字串?

Patricia Arquette
發布: 2025-01-01 12:19:10
原創
335 人瀏覽過

How to Concatenate Multiple Rows into a Single String in SQL?

基於 ID 連接值

在資料操作中,通常需要將多行資料組合成單一字串。這可以透過串聯來實現,其中字串由較小的片段組裝而成。

問題陳述:

您有一個名為「結果」的表,其中有兩列:「 Response_ID」和「標籤」。每個“Response_ID”對應多個“Label”值。您的目標是產生一個新表,其中每個“Response_ID”一行,所有“標籤”值連接成一個字串,並用逗號分隔。

解決方案:

要根據「Response_ID」連接值,您可以使用以下SQL查詢:

select T1.Response_ID,
       stuff((select ','+T2.Label
              from Results as T2
              where T1.Response_ID = T2.Response_ID
              for xml path(''), type).value('.', 'varchar(max)'), 1, 1, '') as Label
from Results as T1
group by T1.Response_ID
登入後複製

解釋:

  • T1.Response_ID:原始資料中的「Response_ID」欄位table.
  • Stuff():此函數連接字串。它採用以下參數:

    • 要連接的結果字串(在括號中)。
    • 結果字串中應開始連接的起始位置(在本例中為 1)。
    • 要從結果字串開頭刪除的子字串的長度(在此為 1) case)。
    • 要連接的字串。
  • XML 路徑:此子查詢為連接過程產生 XML 片段。每個「Label」值都包含在以逗號分隔的 XML 元素中。
  • value():此函數從 XML 片段中提取連接的字串。

範例:

考慮以下內容表:

Response_ID Label
12147 It was not clear
12458 Did not Understand
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 Understand,Was not resolved,Did not communicate
12586 Spoke too fast
12587 Too slow

注意:連接字串的順序可能並不總是可預測的。為了精確控制順序,可以在子查詢中使用「ORDER BY」語句。

以上是如何在 SQL 中將多行連接成單一字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板