原表数据:

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

期望结果:

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

即可实现以上效果

执行以下SQL:

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

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

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

STUFF语法

STUFF ( character_expression , start , length , replaceWith_expression )  

参数

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

start 的类型可以是 bigint。

length 的类型可以是 bigint。

如果 replaceWith_expression 为 NULL,则在不插入任何内容的情况下删除字符。

 

FOR XML PATH

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

SELECT * FROM Student FOR XML PATH

结果如下:

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

执行以下SQL:

SELECT * FROM Student FOR XML PATH('')

结果如下:

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

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

相关文章: