admin

SQL Server使用多对多相关表连接行

sql

我已经搜索过我的问题,但是大多数示例(如果不是全部)都必须处理一个或两个表,它们之间是一对多的关系。所以,这是我的情况:

我的第一张桌子是:

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等的示例,但是这些似乎都没有帮助我解决我的情况,或者至少我没有深入研究它们以完成工作。

提前致谢,


阅读 150

收藏
2021-06-07

共1个答案

admin

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

祝你好运。

2021-06-07