2014-05-07 36 views
0

我想合併行到單列使用FOR XML PATHSQL如何在SQL中使用FOR XML PATH將行合併到單列中?

這裏是我的查詢:

select d.Device from tbl_Sales_OrderItems tsoi left join tbl_devices d 
on d.DeviceID=tsoi.DeviceID 
where salesorderid=102 
and tsoi.Quantity>0 
and tsoi.TypeID=1 

union all 

select d.Partnumber Device from tbl_Sales_OrderItems tsoi left join tbl_VendorParts d 
on d.VendorPartID=tsoi.RefID 
where salesorderid=102 
and tsoi.Quantity>0 
and tsoi.TypeID=2 

我在這裏從tbl_Sales_Order得到兩行即兩個設備名稱。

現在這些行我想單行使用FOR XML PATH到一個列中。

進一步後應用FOR XML PATH我想使用它在select query我想要使用行值如下。

Select salesorderid,@resultinRow from tbl_Sales_Orders 

輸出所需:

SalesOrderID Devices 
    102   Device1,Device2 
    103   Device3,Device2 

回答

1

測試數據

DECLARE @TABLE TABLE (SalesOrderID INT, Devices VARCHAR(30)) 
INSERT INTO @TABLE VALUES 
(102,'Device1'), 
(102,'Device2'), 
(103,'Device3'), 
(103,'Device2') 

查詢

SELECT t.SalesOrderID 
     , STUFF((SELECT ', ' + Devices 
       FROM @TABLE 
       WHERE SalesOrderID = t.SalesOrderID 
       FOR XML PATH(''),TYPE) 
       .value('.','NVARCHAR(MAX)'),1,2,'') AS Devices 
FROM @TABLE t 
GROUP BY t.SalesOrderID 

結果集

╔══════════════╦══════════════════╗ 
║ SalesOrderID ║  Devices  ║ 
╠══════════════╬══════════════════╣ 
║   102 ║ Device1, Device2 ║ 
║   103 ║ Device3, Device2 ║ 
╚══════════════╩══════════════════╝ 
+0

喜@ M.Ali正如我所說的都是從那裏設備名稱必須選擇tbl_Devices&tbl_VendorParts取決於TYPEID以及他們有很多列,以便不能使用兩個不同的表通過...分組。你能幫我在現有的查詢嗎? –

相關問題