在 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 子句。XML 元素作为 SQL Server 的 FOR XML PATH 函数的结果集返回。为了创建单行,它用于组合或连接多个列。使用 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 中轻松合并行的三种不同方法。