두 테이블 Customers
및 Orders
에 몇 가지 데이터가 있습니다.왼쪽 외부 조인을 사용하는 SQL Server 재귀 쿼리
SELECT * FROM Customers C;
결과 :
이CustomerId Name
--------------------
1 Shree;
2 Kalpana;
3 Basavaraj;
검색어 : 결과
select * from Orders O;
: 내가 고객 데이터를 채울 필요로하는 곳에 나는 비즈니스 요구 사항을
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
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 또는 데이터 샘플을 편집하려면 ** 텍스트 편집기에서 해당 행을 강조 표시하고 편집기 툴바에서 "코드 샘플"버튼 ('{})을 클릭하여 멋지게 형식을 지정하고 구문을 강조 표시해야합니다! –
질문이 명확하지 않습니다. 원하는 결과를 게시 한 결과입니까? –