SQL Server 将一列的多行内容拼接成一行

Aria
Aria
发布时间:2026-10-13| 4人浏览过
原创

在使用 SQL Server 进行数据处理时,经常需要将同一组别下的多行记录合并为单行显示,例如将多个企业名称按类别汇总。虽然 MySQL 提供了 GROUP_CONCAT 函数,但 SQL Server 中并没有直接的内置函数。本文将详细介绍利用 FOR XML PATH 配合 STUFF 函数来实现这一需求的具体操作、参数含义及注意事项。

问题目标:行转列拼接

假设数据库中有一张表 Table_A,包含“类别”和“名称”两列。我们需要将相同类别下的所有名称合并到同一行,并用逗号隔开。

原始数据示例:

类别 名称
AAA 企业1
AAA 企业2
AAA 企业3
BBB 企业4
BBB 企业5

期望输出结果:

类别 名称(拼接后)
AAA 企业1,企业2,企业3
BBB 企业4,企业5

核心实现方案

在 SQL Server 2005 及以上版本中,可以通过以下 SQL 语句实现上述转换:

SELECT 
	类别,
	名称 = (
		STUFF(
			(SELECT ',' + 名称 FROM Table_A WHERE 类别 = A.类别 FOR XML PATH('')),
			1,
			1,
			''
		)
	)
FROM Table_A AS A
GROUP BY 类别;

该查询逻辑清晰,分为两个主要步骤:首先使用子查询生成带有前缀分隔符的 XML 字符串,然后使用外部查询去除多余的第一个分隔符。

关键技术点解析

第一步:理解 FOR XML PATH('')

FOR XML PATH 是将查询结果集转换为 XML 格式的一种手段。当参数设置为空字符串 ('') 时,它会将每一行查询到的值直接连接起来,而不包裹任何特定的标签名。

为了更直观地理解,我们引入一个学生选课表 stu_courses 进行测试:

执行以下查询:

SELECT stu_name, stu_course 
FROM stu_courses 
FOR XML PATH;

运行结果如下所示:

如上结果所示,FOR XML PATH 能够将多行的字段值按照顺序拼接成一个长字符串。如果在查询中选择增加固定字符,如 ',' + stu_course,则会在每个名称前加上逗号。这会导致最终拼接结果的开头多出一个无意义的逗号,需要下一步处理。

第二步:使用 STUFF 清理首字符

由于上一步生成的字符串是以分隔符开头的(例如:,企业1,企业2),我们需要将其修正为标准格式(企业1,企业2)。此时使用 STUFF 函数非常合适。

函数定义:
STUFF(string_expression, start, length, replacement_string)

作用:
从源字符串的第 start 个位置开始,删除长度为 length 的子串,并在该位置插入新的字符串 replacement_string。

在本例中的应用:
STUFF((...), 1, 1, '')
含义是:从字符串第 1 个字符开始,删除 1 个字符(即前面的那个多余逗号),然后用空字符串 '' 替换。这样就去掉了开头的分隔符。

完整操作步骤总结

  1. 构建子查询:在子查询中使用 '分割符' + 列名 ... FOR XML PATH('') 格式,生成以分割符开头的连续字符串。
  2. 外层引用:在主查询中使用 GROUP BY 分组,并在选择列中使用子查询作为标量子查询或相关子查询。
  3. 去头处理:在最外层应用 STUFF 函数,起始位置设为 1,长度设为 1,替换为空,从而得到干净的拼接字符串。

注意事项与排错

  • 性能考量:FOR XML PATH 在处理极大量数据时性能可能不如某些专用函数(如 SQL Server 2017+ 提供的 STRING_AGG 函数),但在常规业务场景下表现稳定且兼容性好。
  • 特殊字符:如果拼接的内容中包含 XML 保留字符(如 <, >, &),FOR XML PATH 会自动将其编码为对应的实体(如 &lt;)。如需显示原文,需在后续代码中进行解码处理,或者注意避免在业务数据中使用这些符号。
  • 排序问题:默认情况下,FOR XML PATH 并不保证返回值的物理排序。如果需要特定顺序拼接,应在子查询中添加 ORDER BY 关键字。

简要总结

通过组合使用 FOR XML PATH('') 和 STUFF(),可以优雅地在 SQL Server 中实现多行数据的字符串拼接功能。掌握这两个函数的配合使用,能够极大简化数据清洗和报表生成的逻辑。以上就是SQL Server将一列的多行内容拼接成一行的详细内容,更多关于数据库行转列的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。