SQL Server 中將多行合併為字串


在 SQL Server 中,有多種不同的技術可以將記錄合併成字串。

我們將在這個教程中學習將多行合併成一個字串的不同方法:

  • COALESCE

  • XML PATH

  • STRING_AGG

第一種方法:COALESCE

要使用 COALESCE 方法將多行合併到單個字串中,首先,建立一個 varchar 型別的變數來儲存合併後的字串,然後使用逗號分隔每一行的字串值。最後,將 COALESCE 應用於該變數。

語法

Select column_name1, column_name2,.. from table_name
Declare @variable1 Varchar(MAX),@variable2 Varchar(MAX),..; 
Select @variable1 = COALESCE(@variable1  + ', ' + column_name1, column_name2) 
        From table_name Select @variable1;
  • 在上面的查詢中,使用了 SQL COALESCE 函式來合併所有行的值。

  • Declare 語句用於宣告一個變數來儲存所有行的組合值。

  • SQL select 語句用於選擇和儲存變數。

  • 最後的 SQL select 語句用於檢索變數資料。

示例

SELECT COALESCE(NULL, NULL, NULL, 'W3Schools.com', NULL, 'Example.com');

第二種方法:XML PATH

SQL Server 2005 及更高版本支援此 XML PATH 子句。SQL Server 的 FOR XML PATH 函式將 XML 元素作為結果集返回。為了建立一個單行,它被用來組合或連線多個列。使用 XML PATH 子句建立每個記錄作為 XML 元素,並且該列成為巢狀元素。

語法

SELECT  column_name1,column_name2,..
FROM   table_name  FOR XML PATH('');
  • 在上面的查詢中,使用了 SQL XML PATH 子句來合併所有行的值。

  • SQL select 語句用於選擇所有城市值並將它們轉換為 XML 標記。

  • 每一行值都在 XML 標記之間。

示例

SELECT ID, abc = STUFF( (SELECT ',' + name FROM temp1 FOR XML PATH ('')), 1, 1, '' ) FROM temp1 GROUP BY id

第三種方法:使用 STRING_AGG

SQL Server 2017 及更高版本支援 STRING_AGG 函式。STRING_AGG 是一個內建的字串函式,用於將多行資料組合成一個字串。此函式將所有行中的表示式轉換為字串型別後,將它們連線成一個字串。

語法

STRING_AGG ( expression, separator ) [ WITHIN GROUP ( ORDER BY <order_by_expression_list> [ ASC | DESC ] ) ]
  • 上面的查詢中使用了 SQL STRING_AGG 函式來聚合所有行中列的值。

  • 使用 SQL select 命令和 STRING_AGG() 函式,所有值都合併在一起,並以逗號 (,) 分隔。

示例

STRING_AGG ( expression, separator ) [ <order_clause> ]
<order_clause> ::=   
WITHIN GROUP ( ORDER BY <order_by_expression_list> [ ASC | DESC ] )

結論

在本節中,我們瞭解了在 SQL 中輕鬆組合行的三種不同方法。

更新於:2023年4月6日

瀏覽量:18K+

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告