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+

启动您的职业生涯

完成课程获得认证

开始学习
广告