2

私はすでに自分の問題を検索しましたが、ほとんどの例 (すべてではないにしても) は、1 対多の関係を持つ 1 つまたは 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

私の2番目のテーブルは次のとおりです。

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

上記のテーブル間に多対多の関係が確立されているため、次のような 3 番目の (ジョイント) テーブルがあります。

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を使用して複数の行を1つの行に戻し、次にを使用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

そして、これがSQLFiddleです。

幸運を。

于 2013-01-23T20:18:16.830 に答える