2014-02-28 1 views
0

은 3 개의 다른 날짜를 기준으로 3 개의 다른 테이블에서 레코드를 캡처하는 데 도움이 필요합니다. 테이블의 임의의 트랜잭션이 포함 된 결과가 가능한 결합되어야한다 샘플 데이터각각의 데이터가있는 3 개의 테이블을 결합하여 반환합니다.

는 각각에 대한 판매 아이템 처리 또는 기간 내에 취소, 하나 개의 행을 포함한다

결과

Table 1 sales table 
Item#, Sold Date, invoice, etc. 
111, 1/2/14, poabc 
222, 1/3/14, poedf 
123, 1/4/14, poxyz 

Table 2 process table 
Item#, proc Date, paid amt, etc. 
111, 1/12/14, 12 
456, 1/25/14, 16 

Table 3 canceled table 
Item#, cancel date, reason, etc. 
222, 1/8/14, reason1 
555, 1/9/14, reason2 
- 예
결과 항목 번호, 판매 날짜, PROC 날짜, 취소 날짜, 이유 등

111, 1/2/14, 1/12/14, (null) , (null) , 
222, 1/3/14, (null) , 1/8/14, reason1 
123, 1/4/14, (null) , (null) , (null) , 
456, (null), 1/25/14, (null) , (null) , 
555, (null) , (null) ,1/9/14, reason2 

에 접근하는 방법을 확실하지, 노동 조합, 조인 등보기를 시도, 항목 # s의에 따라, PROC에 외부 왼쪽으로 = 판매 된 (+) 및 proc = 취소 (+) 된 다음 취소 된 항목 번호의 두 번째보기와 결합됩니다 위와 같지 않은 상태에서 취소 된 외부 = proc (+) 및 취소 된 = 판매 된 (+) (proc IS NULL 및 판매 된 NULL) 다음 무엇입니까? 이것이 최선의 방법인지 또는 다른 설정 방법인지 잘 모르겠 음

답변

0

대부분의 데이터베이스에서 지원하는 full outer join을 사용하면이 작업을 수행 할 수 있습니다.

select coalesce(s.item, p.item,) as item, 
     s.SoldDate, p.procDate, c.cancelledDate, c.reason 
from sales s full outer join 
    process p 
    on p.item = s.item full outer join 
    cancelled c 
    on c.item = coalesce(s.item, c.item); 
+0

주소 및 전화 번호 등의 추가 세부 정보에 가입 할 수있는 다른 테이블이 3 개 있습니다. 다음 명령문에서 addng을 유지할 수 있습니까? – user3363178

+0

행의 하위 집합 만있는 경우에도 동일한 작업을 수행 할 수 있습니다. . . 각 조건에 대해'coalesce()'를 확장하는 것을 잊지 마십시오. –

+0

키는 다른 테이블에서 달라지며, 대부분이 항목 #에서 구동되지만 일부는 고객 #으로부터 끌 리게됩니다. 예를 들어, – user3363178

관련 문제