J'ai déjà recherché mon problème, mais la plupart des exemples (sinon tous) ne traitent qu'une ou deux tables avec une relation un-à-plusieurs entre elles. Alors, voici mon scénario:
Ma première table est:
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
Ma deuxième table est:
ExtrasID Name ------------------- 1 Value 1 2 Value 2 3 Value 3 4 Value 4 5 Value 5
J'ai une relation many-to-many établie entre les tables ci-dessus, donc il y a une troisième table (commune) qui est la suivante:
OrderExtrassID OrderExtras_OrderID OrderExtras_ExtrasID ---------------------------------------------------------------- 20 19 2 22 22 3 23 23 2 24 23 5
Maintenant, tout ce que je veux faire, c'est get un résultat tel que:
OrderID Extras ---------------------------- 18 NULL 19 Value 2 22 Value 3 23 Value 2, Value 5 24 NULL
Il y a beaucoup d'exemples utilisant XML PATH, PIVOT, CTE etc., mais aucun de ceux-ci ne semble m'aider avec mon scénario, ou du less je n'ai pas réussi à les étudier en profondeur, afin de faire mon travail …
Merci d'avance,
Je suggérerais d'utiliser For XML
pour returnner plusieurs lignes dans une seule ligne, puis en utilisant STUFF
pour supprimer la virgule supplémentaire. Quelque chose comme ça:
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
Et voici le violon SQL .
Bonne chance.