我已经搜索过我的问题,但大多数示例(如果不是全部)都必须处理仅一两个表,它们之间具有一对多关系。 所以,这是我的场景:
我的第一个表是:
OrderID Quantity Price
----------------------------------
18 1000.00 160.00
19 1000.00 40.00
22 1000.00 40.00
23 100.00 500.00
24 10.00 50.00
我的第二个表是:
ExtrasID Name
-------------------
1 Value 1
2 Value 2
3 Value 3
4 Value 4
5 Value 5
我在上面的表之间建立了多对多关系,因此有第三个(联合)表,如下所示:
OrderExtrassID OrderExtras_OrderID OrderExtras_ExtrasID
----------------------------------------------------------------
20 19 2
22 22 3
23 23 2
24 23 5
现在,我想要实现的就是获得如下结果:
OrderID Extras
----------------------------
18 NULL
19 Value 2
22 Value 3
23 Value 2, Value 5
24 NULL
有很多使用 XML PATH、PIVOT、CTE 等的示例,但这些似乎都对我的场景没有帮助,或者至少我没有设法深入研究它们,以便完成我的工作...
提前致谢,
最佳答案
我建议使用 For XML
将多行返回到单行中,然后使用 STUFF
删除多余的逗号。像这样的事情:
SELECT O.OrderId
,STUFF(
(
SELECT ',' + E.Name AS [text()]
FROM OrderExtras OE
Inner Join Extras E
ON E.ExtrasId = OE.OrderExtras_ExtrasID
WHERE O.OrderId = OE.OrderExtras_OrderID
ORDER BY E.Name
FOR XML PATH('')
), 1, 1, '') AS ColList
FROM Orders O
这是SQL Fiddle .
祝你好运。
关于SQL Server 使用多对多相关表连接行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14488401/