For XML Path('') 实现多行合并到一行, 并带有分隔符
T-sql 有一个for xml path('')的从句能把多行结果合并到一行,并成为xml 格式
比如有一张表tb有两列,其格式和数据为:
id value ———— 1 aa 1 bb 2 aaa 2 bbb 2 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
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
取别名
人各有命,上天注定,有人天生为王,有人落草为寇。脚下的路,如果不是你自己的选择,那么旅程的终点在哪,也没人知道。你会走到哪,会遇到谁,都不一定。