Theme NexT works best with JavaScript enabled

ShunNien's Blog

不積跬步,無以致千里;不積小流,無以成江海。

0%

將多列資料合併 使用 for XML Path

資料庫資料表中,想要將同一資料欄的資料合併顯示時,可以考慮採取 使用 for xml path 。以下進行範例說明:

首先範例資料如下:

OrderID ProductID UnitPrice Quantity Discount
10248 11 14 12 0
10248 42 9.8 10 0
10248 72 34.8 5 0

想要把同個 OrderID 資料的 ProductID 和 UnitPrice 合併在一起顯示的時候,使用 for xml path

1
2
3
4
SELECT
',' + CAST(ProductID AS VARCHAR) + '--' + CAST([Quantity] AS VARCHAR)
FROM OrderDetails
FOR XML PATH ('')

呈現結果如下
,11--12,42--10,72--5

這個組合出來的字串,最前面會多出一個 comma(逗號,),所以將多餘的分隔符號用 stuff 移除,其語法如下,或是觀看線上範例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
select [OrderID], stuff(mergingOd.pu,1,1,'') combineStr
from
(
select [OrderID],
(
SELECT
',' +cast(ProductID AS VARCHAR) + '--' + Cast([UnitPrice] AS VARCHAR )
FROM OrderDetails
WHERE [OrderID]=od2.[OrderID]
for xml path('')
) pu
from OrderDetails od2
GROUP BY [OrderID]
) as mergingOd

資料呈現

OrderID combineStr
10248 11–14.00,42–9.80,72–34.80

如果不轉換字串,直接使用 For XML Path 的話,那就會轉換成 XML,而 XML 的節點名稱是可以改變的
線上範例

1
2
3
4
ELECT
CAST(ProductID AS VARCHAR)
FROM OrderDetails
FOR XML PATH ('pid')

資料呈現
<pid>11</pid><pid>42</pid><pid>72</pid>

參考資料

歡迎關注我的其它發布渠道