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

原表数据:sql

指望结果:express

使用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

 能够看到输出结果与指望结果相同:spa

 

STUFF语法

STUFF ( character_expression , start , length , replaceWith_expression )  

参数

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

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

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

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

 

FOR XML PATH

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

SELECT * FROM Student FOR XML PATH

结果以下:get

执行如下SQL:

SELECT * FROM Student FOR XML PATH('')

结果以下:

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

相关文章
相关标签/搜索