http://blog.csdn.net/rav009/article/details/50723307
T-sql 有一个for xml path('')的从句能把多行结果合并到一行,并成为xml 格式
比如有一张表tb有两列,其格式和数据为:
id value—————1 aa1 bb2 aaa2 bbb2 ccc
如果对其执行sql: select id, value from tb for xml path('tbnode') 则返回的结果集仅为一行一列:
<tbnode><id>1</id><value>aa</value><id>1</id><value>bb</value>........<id>2</id><value>ccc</value></tbnode>
现在我们取巧一点, 省略path括号里的内容, 同时把这两列想办法变成匿名列,sql如下:
select id+'',value+'' from tb for xml path('') //在path("") 不写任何东西会自动生成一个序列标识符那么返回结果如下(也是一个一行一列):
1aa1bb2aaa2bbb2ccc
基于这样的思路, 现在要对所有不同的ID的value进行合并,希望得到如下的结果集:id value—————1 aa,bb2 aaa,bbb,ccc
select value+',' from tb where ID=1 for xml path('') 这样就可以得到 "aa,bb," select id,valuelist=stuff((select ','+value from tb as b where b.ID=a.ID for xml path('')),1,1,'') //注意这个Stuff函数的替换,因为select后跟的是',' 所以要把这个‘,’ 替换掉 from tb as a group by id
转载于:https://www.cnblogs.com/ZkbFighting/p/8067426.html
相关资源:数据结构—成绩单生成器