私は2つのテーブルCustomers
とOrders
をいくつかのデータを持っています。私は顧客からのデータを移入するために必要なビジネス要件が外部結合を左に持って左外部結合を伴うSQL Server再帰クエリ
OrderId CustomerId OrderDate
-------------------------------------------------
100 1 2017-01-05 23:16:15.497
200 4 2017-01-06 23:16:15.497
300 3 2017-01-07 23:16:15.497
:
SELECT * FROM Customers C;
結果:
CustomerId Name
--------------------
1 Shree;
2 Kalpana;
3 Basavaraj;
問合せ:
select * from Orders O;
結果に繰り返し注文。私は以下の質問と希望のデータを書いています。
SELECT *
FROM Customers C
LEFT OUTER JOIN
(SELECT *
FROM Orders
WHERE OrderId = 100) O ON O.CustomerId = C.CustomerId
UNION ALL
SELECT *
FROM Customers C
LEFT OUTER JOIN
(SELECT *
FROM Orders
WHERE OrderId = 200) O ON O.CustomerId = C.CustomerId
UNION ALL
SELECT *
FROM Customers C
LEFT OUTER JOIN
(SELECT *
FROM Orders
WHERE OrderId = 300) O ON O.CustomerId = C.CustomerId;
望ましい結果:
CustomerId Name OrderId CustomerId OrderDate
--------------------------------------------------------------------
1 Shree 100 1 2017-01-05 23:16:15.497
2 Kalpana NULL NULL NULL
3 Basavaraj NULL NULL NULL
1 Shree NULL NULL NULL
2 Kalpana NULL NULL NULL
3 Basavaraj NULL NULL NULL
1 Shree NULL NULL NULL
2 Kalpana NULL NULL NULL
3 Basavaraj 300 3 2017-01-07 23:16:15.497
私はループで左外側のクエリを入れて、OrderIdでに合格し、最終的に結果データを保存するためのオプションを持っているが、それが原因で、レコードの数が多いの多くの時間を要し。私はこれを行うための最善の方法を知りたい。私は機能とCTEを試しましたが、これまでの運はありません。助けてください。
事前に感謝します。私はデカルト製品に似た使用してソリューションを持っている
SELECT C.*,
OrderId = CASE WHEN C.CustomerId = O.CustomerID THEN O.OrderId ELSE NULL END,
CustomerId = CASE WHEN C.CustomerId = O.CustomerID THEN O.CustomerId ELSE NULL END,
OrderDate = CASE WHEN C.CustomerId = O.CustomerID THEN O.OrderDate ELSE NULL END
FROM Orders O, Customers C
より良い方法でフォーマットすることができたらいいですか、 – sand
ポストコード、XMLまたはデータサンプルを表示するには、テキストエディタで**これらの行を強調表示し、エディタツールバーの "コードサンプル"ボタン( '{}')をクリックする必要があります。 –
あなたの質問はあまり明確ではありません。あなたが望む結果を掲示した結果ですか? –