[SQL] 將多列資料合併 使用 For XML Path

  • 5255
  • 0
  • 2014-02-25

[SQL] 將多列資料合併 使用 For XML Path

當想要將同一資料欄的資料合併顯示時,可以考慮採取 使用 for xml path 。 就像以下資料

 

SELECT  [OrderID]
      ,[ProductID]
      ,[UnitPrice]
      ,[Quantity]
      ,[Discount]
  FROM [Northwind].[dbo].[Order Details]
  WHERE [OrderID]='10248'

image

 

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

SELECT  
       ',' +cast(ProductID AS NVARCHAR) + '--' + Cast([UnitPrice] AS NVARCHAR ) 
  FROM [Northwind].[dbo].[Order Details]  
  WHERE [OrderID]='10248'
  for xml path('')

image

 

然後調整一下整理一下,將多餘的分隔符號用 stuff 移除

select [OrderID], stuff(mergingOd.pu,1,1,'')
from
(
	select  [OrderID],
	(
		SELECT  
			   ',' +cast(ProductID AS NVARCHAR) + '--' + Cast([UnitPrice] AS NVARCHAR )
		  FROM [Northwind].[dbo].[Order Details]   
		  WHERE [OrderID]=od2.[OrderID]
		  for xml path('')
	)  pu
	from [Northwind].[dbo].[Order Details]  od2
	GROUP BY [OrderID]
) as mergingOd

image

 

For XML Path 的改變節點名稱輸出

SELECT  
	   cast(ProductID as varchar)
  FROM [Northwind].[dbo].[Order Details]   
  WHERE [OrderID]='10248'
  for xml path('pid')

image

 
參考資料: 
MSDN_FOR XML 子句的基本語法 
MSDN_搭配 FOR XML 使用 PATH 模式
MSDN_STUFF (Transact-SQL)