SQL Server Concatenate Rows Using Many-To-Many Related Tables

微笑、不失礼 提交于 2020-01-04 14:39:26

问题


I've already searched for my problem, but most of the examples (if not all), have to deal with only one or two tables with a one-to-many relationship between them. So, here goes my scenario:

My first table is:

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

My second table is:

ExtrasID    Name
-------------------
1           Value 1
2           Value 2
3           Value 3
4           Value 4
5           Value 5

I have a many-to-many relationship established between the tables above, so there is a third (joint) table which is as follows:

OrderExtrassID  OrderExtras_OrderID OrderExtras_ExtrasID
----------------------------------------------------------------
20              19                  2
22              22                  3
23              23                  2
24              23                  5

Now, all I want to achieve is to get a result such as the following:

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

There are many examples using XML PATH, PIVOT, CTE etc., but none of these seems to help me with my scenario, or at least I've not managed to study them in depth, in order to get my work done...

Thanks in advance,


回答1:


I would suggest using For XML to return multiple rows into a single row and then using STUFF to removing the extra comma. Something like this:

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

And here is the SQL Fiddle.

Good luck.



来源:https://stackoverflow.com/questions/14488401/sql-server-concatenate-rows-using-many-to-many-related-tables

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!