日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

靈活運用 SQL Server 數據庫的 FOR XML PATH

系統 2362 0

起因 ?

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

調度單號 與調度單相關的多張作業單號
001 0001/0002/0003
002 0004
003 0005/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 


      
        ;
      
    

靈活運用 SQL Server 數據庫的 FOR XML PATH


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 天气| 曲水县| 泽州县| 伽师县| 凤冈县| 梨树县| 上饶市| 繁昌县| 龙南县| 昌乐县| 东辽县| 石阡县| 上饶市| 大城县| 龙州县| 崇礼县| 黔西县| 开鲁县| 咸丰县| 车致| 泰安市| 仁寿县| 平谷区| 朔州市| 襄樊市| 张掖市| 二连浩特市| 侯马市| 蒙阴县| 周宁县| 鱼台县| 崇阳县| 中牟县| 雷州市| 博客| 玛纳斯县| 山丹县| 潮安县| 普兰店市| 武威市| 金溪县|