技术文章和资源

技术文章(时间排序)

热门类别

Python PHP MySQL JDBC Linux

在 SQL Server 中将行合并为字符串

dbmsmysqldatabase

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


相关文章