牛骨文教育服务平台(让学习变的简单)
博文笔记

SqlServer 如何将查询出的多行数据拼成一个字符串返回

创建时间:2014-12-17 投稿人: 浏览次数:5397

我们在查询或做报表时,会遇到这样的情况,一个主表table_main,一个字表table_sub

查询时需要显示主表的字段,然后把子表的内容拼成一个字符串与主表一起显示

例如:

table_main
main_id main_name
1 张三
2 李四

table_sub
main_id sub_hobby
1 唱歌
1 跳舞
2 足球
2 篮球
2 羽毛球

我们可以执行下面的语句得到预期效果,如下:

SELECT main_id,main_name,
main_hobby=STUFF((SELECT ","+sub_hobby FROM 
table_sub WHERE main_id=t.main_id FOR XML PATH("")),1,1,"")
FROM table_main t
GROUP BY main_id,main_name

 1 张三 唱歌,跳舞
 2 李四 足球,篮球,羽毛球


分析:

stuff(select "," + fieldname  from tablename for xml path("")),1,1,"")
这句话的作用便是将多行fieldname字段的内容拼成字符串,并用逗号隔开。
for xml path是SQL Server 2005以后版本支持的将查询内容拼成XML的方法。
stuff函数的作用是去掉字符串最前面的一个逗号。

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。