2

我已经搜索过我的问题,但大多数示例(如果不是全部)只需要处理一两个表,它们之间存在一对多关系。所以,这是我的场景:

我的第一张桌子是:

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 等的例子,但这些似乎都不能帮助我解决我的场景,或者至少我没有设法深入研究它们,以完成我的工作......

提前致谢,

4

1 回答 1

2

我建议使用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

祝你好运。

于 2013-01-23T20:18:16.830 回答