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
Теперь все, чего я хочу добиться, - это получить такой результат, как следующее:
OrderID Extras
----------------------------
18 NULL
19 Value 2
22 Value 3
23 Value 2, Value 5
24 NULL
Есть много примеров использования XML PATH, PIVOT, CTE и т. д. но ни один из них, кажется, не помогает мне с моим сценарием, или, по крайней мере, мне не удалось изучить их глубоко, чтобы закончить свою работу...
Заранее спасибо,
1 ответ:
Я бы предложил использовать
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 .
Удачи.