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 中轻松组合行的三种不同方法。