Shunze 學園 >電腦資訊學系 >資料庫管理 > 《分享》透過XML format輸出一對多結果 哈囉,還沒有註冊或者登入。請你[註冊|登入]
« 上一篇主題 下一篇主題 » 顯示成列印模式 | 增加到我的最愛
發表新主題 發表回覆
作者
主題
shunze
工友伯伯


註冊日期: 2002 04
來自: 潮汐終止之地
文章: 2380

shunze 離線
《分享》透過XML format輸出一對多結果引用回覆 編輯/刪除文章 搜尋由  發表的其他文章 回報給版主 IP 位置 回此頁最上方

以sample資料庫Northwind為例,一個OrderID可對應多筆訂單。



如何能將訂單結果以一對多的方式輸出?




這個需求可透過XML format輸出來達成。

將Select出來的結果加上逗號分隔,
以預設的FOR XML PATH進行格式化輸出,不帶任何參數輸出結果如下

SELECT cast(ProductID AS NVARCHAR ) + ',' from [Order Details]
where OrderID = '10248'
FOR XML PATH



參數改以空字串取代XML elements後,結果如下
SELECT cast(ProductID AS NVARCHAR ) + ',' from [Order Details]
where OrderID = '10248'
FOR XML PATH('')



把這樣的FOR XML PATH('')輸出樣式搭配訂單主表後,結果如下
SELECT OrderID, (SELECT cast(ProductID AS NVARCHAR ) + ',' from [Order Details]
where OrderID = ord.OrderID
FOR XML PATH('')) as productIDs
from orders ord
GROUP BY orderid



再透過小技巧left(欄位,len(欄位)-1)修掉最後的逗點,結果就達陣囉∼
SELECT M.OrderID ,left(M.productIDs,len(m.productIDs)-1) as productIDsFinal from
(SELECT OrderID,(SELECT cast(ProductID AS NVARCHAR ) + ',' from [Order Details]
where OrderID = ord.OrderID
FOR XML PATH('')) as productIDs
from orders ord
GROUP BY orderid) M
ORDER By M.OrderID




PS.
FOR XML參數在SQL 2005後才可使用。



♥順子老婆的網拍,請多關照∼

If you don't like something, change it.
If you can't change it, change your attitude.
Don't complain!




2013-04-23, 15:50 shunze 的個人資料 把 shunze 加入好友列表 發送Email給 shunze 瀏覽 shunze 的網站 MSN : shunze@gmail.com
shunze
工友伯伯


註冊日期: 2002 04
來自: 潮汐終止之地
文章: 2380

shunze 離線
FOR XML不同參數的輸出結果引用回覆 編輯/刪除文章 搜尋由  發表的其他文章 回報給版主 IP 位置 回此頁最上方

原資料


FOR XML RAW


FOR XML RAW('AAA')


FOR XML AUTO


FOR XML AUTO('AAA')


FOR XML EXPLICIT


FOR XML PATH


FOR XML PATH('AAA')


參考資料微軟TechNet



♥順子老婆的網拍,請多關照∼

If you don't like something, change it.
If you can't change it, change your attitude.
Don't complain!




2013-04-23, 16:22 shunze 的個人資料 把 shunze 加入好友列表 發送Email給 shunze 瀏覽 shunze 的網站 MSN : shunze@gmail.com
  « 上一篇主題 下一篇主題 »
發表新主題 發表回覆
跳到:

Powered by: Burning Board 1.1.1 2001 WoltLab GbR