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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

灵活运用 SQL Server 数据库的 FOR XML PATH

發布時間:2024/4/15 asp.net 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 灵活运用 SQL Server 数据库的 FOR XML PATH 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

起因?

今天歐陽冰提出一個報表需求,其核心部分可以簡化為這樣一張表格:

調度單號與調度單相關的多張作業單號
0010001/0002/0003
0020004
0030005/0006/0007/0008

從上述表格可以看出,如何把調度單的多行作業單明細的單號合并到同一行的一個字段中,并用斜杠 / 分隔,是這個需求的難點。

解決?

于是到網上去搜索了一下,有這樣一篇文章:靈活運用 SQL SERVER FOR XML PATH
其中介紹了 SQL Server 數據庫的 FOR XML PATH 關鍵字的用法。

在一句 SELECT 語句的最后加上 FOR XML PATH,就可以把整個結果數據集變成一個 xml 字符串。大家可以自行嘗試一下。
而如果使用 FOR XML PATH(''),則是去除所有 xml 節點標記,只剩下原原本本的數據。我們要的就是這個。

于是,我們可以寫 SQL:

SELECT DH.DH_DISPATCH_NO DISPATCH_NO, ( SELECT CLH.CLH_CARGO_LOAD_NO + '/' FROM TM_DISPATCH_CARGO_LOAD_L DCLL, TM_CARGO_LOAD_H CLH WHERE DH.BILLID = DCLL.BILLID AND DCLL.DCLL_CARGO_LOAD_HEADER_ID = CLH.BILLID FOR XML PATH('') ) NOS FROM TM_DISPATCH_H DH GROUP BY DH.BILLID, DH.DH_DISPATCH_NO ;

這樣就已經差不多了,但是多張作業單號這一列最后總是多個斜杠 /。

為了把最后這個斜杠去掉,我們還要使用一下 LEFT 函數。那么最終可以使用這樣一句 SQL 來滿足上述需求:

SELECT DISPATCH_NO, LEFT(NOS, LEN(NOS)-1) CARGO_LOAD_NOS FROM ( SELECT DH.DH_DISPATCH_NO DISPATCH_NO, ( SELECT CLH.CLH_CARGO_LOAD_NO + '/' FROM TM_DISPATCH_CARGO_LOAD_L DCLL, TM_CARGO_LOAD_H CLH WHERE DH.BILLID = DCLL.BILLID AND DCLL.DCLL_CARGO_LOAD_HEADER_ID = CLH.BILLID FOR XML PATH('') ) NOS FROM TM_DISPATCH_H DH GROUP BY DH.BILLID, DH.DH_DISPATCH_NO ) TMP ORDER BY DISPATCH_NO ;

轉載于:https://www.cnblogs.com/suding1188/archive/2012/03/12/2391673.html

總結

以上是生活随笔為你收集整理的灵活运用 SQL Server 数据库的 FOR XML PATH的全部內容,希望文章能夠幫你解決所遇到的問題。

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