SQL 将一列多行数据合并为一行

Posted superfeeling

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL 将一列多行数据合并为一行相关的知识,希望对你有一定的参考价值。

原表数据:

期望结果:

使用STUFF + FOR XML PATH即可实现以上效果

执行以下SQL:

SELECT DISTINCT Name, STUFF((SELECT \',\' + Course FROM Student WHERE Name = T.Name FOR XML PATH(\'\')), 1, 1, \'\') AS Course FROM Student AS T

可以看到输出结果与期望结果相同:

STUFF语法

STUFF ( character_expression , start , length , replaceWith_expression )  

参数

character_expression
字符数据的表达式。 character_expression 可以是常量、变量,也可以是字符列或二进制数据列。

start
一个整数值,指定删除和插入的开始位置。 如果 start 为负或为零,则返回空字符串。 如果 start 的长度大于第一个 character_expression,则返回空字符串。 start 的类型可以是 bigint。

length
一个整数,指定要删除的字符数。 如果 length 为负,则返回空字符串。 如果 length 的长度大于第一个 character_expression,则最多可以删除到最后一个 character_expression 中的最后一个字符。 如果 length 为零,则在字符串中第一个字符之前插入内容。 length 的类型可以是 bigint。

replaceWith_expression
字符数据的表达式。 character_expression 可以是常量、变量,也可以是字符列或二进制数据列。 此表达式从 start 开始替换 length 个字符的 character_expression。 如果 replaceWith_expression 为 NULL,则在不插入任何内容的情况下删除字符。

 

FOR XML PATH

其实FOR XML PATH就是将查询结果集以XML形式展现,有了它我们可以简化查询语句以实现一些以前需要借助函数活存储过程才能完成的工作。以上面的表格为例,执行以下SQL:

SELECT * FROM Student FOR XML PATH

结果如下:

执行以下SQL:

SELECT * FROM Student FOR XML PATH(\'\')

结果如下:

由此可以看出 FOR XML PATH 可以将查询结果根据行输出成XML格式。

以上是关于SQL 将一列多行数据合并为一行的主要内容,如果未能解决你的问题,请参考以下文章

T SQL 将一列多行数据合并为一行

关于SQL Server将一列的多行内容拼接成一行,合并显示在另外表中

SQL Server将一列的多行内容拼接成一行的实现方法

SQL 多行多列数据清洗合并为一行

SQL 怎么将一列中的数据按一个分隔符分成多列显示

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