2013-01-23 29 views
2

我已经搜索了我的问题,但大多数示例(如果不是全部)只能使用一对一的方式处理一个或两个表,他们之间有很多关系。 所以,在这里不用我的情况:使用多对多相关表的SQL Server连接行

我的第一个表是:

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 

现在,人们L I要实现的是得到的结果如下所示:

OrderID Extras 
---------------------------- 
18  NULL 
19  Value 2 
22  Value 3 
23  Value 2, Value 5 
24  NULL 

有使用XML路径,PIVOT,CTE等,但这些都不似乎帮助我与我的情况下,或者在许多例子至少我还没有成功地研究它们的深入开展,为了让我的工作做完...提前

感谢,

回答

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

祝你好运。