日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/4/5 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用 T-sql 的从句 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('')

?

?那么返回結果如下(也是一個一行一列):

1aa1bb2aaa2bbb2ccc

基于這樣的思路, 現在要對所有不同的ID的value進行合并,希望得到如下的結果集:

id value
—————
1 aa,bb
2 aaa,bbb,ccc

首先我們來構造右邊一列:

sql如下:

select value+',' from tb where ID=1 for xml path('')

?

這樣就可以得到 "aa,bb," 。但是最后面會多一個逗號,可以在外面再套一層select,并利用SUBSTRING()函數來去掉它。 在網上的其他方法中也有把逗號加在value前,然后用stuff函數來去掉最前面多余的逗號的,詳見參考鏈接。substring的缺點是用len函數的時候還要再填一遍“select value+',' from tb where ID=1 for xml path('')“,會顯得冗長。

最后完整的sql如下:

select id, valuelist=substring((select value+',' from tb where tb.id=a.id for xml path('')),1,len((select value+',' from tb as b where b.id=a.id for xml path('')))-1) from tb as a group by id

?或者用stuff:

select id,valuelist=stuff((select ','+value from tb as b where b.ID=a.ID for xml path('')),1,1,'') from tb as a group by id

?

轉載于:https://www.cnblogs.com/lgx5/p/9367915.html

總結

以上是生活随笔為你收集整理的利用 T-sql 的从句 for xml path('') 实现多行合并到一行, 并带有分隔符的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。