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 中輕鬆組合行的三種不同方法。