转:利用 T-sql 的从句 for xml path('') 实现多行合并到一行, 并带有分隔符

it2026-10-01  1

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

相关资源:数据结构—成绩单生成器
最新回复(0)