原表数据:
期望结果:
即可实现以上效果
执行以下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 可以是常量、变量,也可以是字符列或二进制数据列。
start 的类型可以是 bigint。
length 的类型可以是 bigint。
如果 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格式。