📜  在 SQL Server 中将行合并为字符串(1)

📅  最后修改于: 2023-12-03 15:07:49.473000             🧑  作者: Mango

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

在开发过程中,有时需要将SQL查询结果中的多行数据合并为一行字符串,这时可以使用SQL Server中的字符串聚合函数来实现。

1. STUFF / XML PATH方法

使用STUFF / XML PATH方法时,需要将每个行数据转换为XML节点,然后使用STUFF函数进行字符串拼接。

示例代码如下:

SELECT 
    STUFF(
        (SELECT ', ' + CONVERT(VARCHAR(10), ColumnName) 
         FROM TableName 
         FOR XML PATH('')
        ), 1, 2, ''
    ) AS ColumnNameList

解释:

  • 使用SELECT查询语句获取需要合并的列的数据,并将每个数据加上逗号分隔符。
  • 将整个结果转换为XML格式,并指定节点名称为空。
  • 将转换后的XML结果传给STUFF函数,使用''来替换第一个逗号和后面的空格,实现字符串拼接。
2. STRING_AGG方法

SQL Server 2017及以上版本已经支持了新的字符串合并函数STRING_AGG。

示例代码如下:

SELECT STRING_AGG(ColumnName, ', ') AS ColumnNameList
FROM TableName

解释:

  • 使用SELECT查询语句获取需要合并的列的数据,并指定逗号分隔符。
  • 将结果传给STRING_AGG函数,实现字符串拼接。
总结

使用上述两种方法均可实现将SQL查询结果中的多行数据合并为一行字符串,选择哪种方法主要取决于所使用的SQL Server版本。如果版本较低,可以使用STUFF / XML PATH方法,如果版本较高,可以使用STRING_AGG方法。

参考链接: