2014-12-17 2 views
0

나는 두 개의 SQL 테이블 표 열이 : 제품, 종료 날짜 (예 : 2014년 1월 31일 00 : 00 : 00.000), saleAmt 표 2는 하나의 열이 : 종료일 (예 : 2014-01-31 00 : 00 : 00.000)SQL 서버 2008

첫 번째 표에는 지난 12 개월 동안 각 제품의 총 월간 판매액이 있습니다. 문제 : 일부 제품에는 한 달 동안 판매가 없으므로 그 달에 해당 제품에 대한 데이터가 표시되지 않습니다.

**Product EndDate SaleAmt** 
TireMC 12/31/2013  5600 
TireMC 1/31/2014  800 
TireMC 2/28/2014  2400 
TireMC 7/31/2014  1600 
TireMC 10/31/2014  4600 
TireMC 11/30/2014  4200 

내가 표 2 일이 표 날짜 비교에서 누락 된 날짜를 얻으려면 : 나는 누락 개월 0

이 데이터가 현재 표에 모습입니다의 판매 금액으로 표시 할 Table1의 각 Product에 대해 Table1에 Table2를 입력하고 SalesAmt를 null로 남겨 둡니다.

**Product EndDate  SaleAmt** 
TireMC 12/31/2013   5600 
TireMC 1/31/2014   800 
TireMC 2/28/2014   2400 
TireMC 3/31/2014   0 
TireMC 4/30/2014   0 
TireMC 5/31/2014   0 
TireMC 6/30/2014   0 
TireMC 7/31/2014   1600 
TireMC 8/31/2014   0 
TireMC 9/30/2014   0 
TireMC 10/31/2014   4600 
TireMC 11/30/2014   4200 

어떻게하면됩니까?

미리 도움을 주셔서 감사합니다.

답변

2

질문을 올바르게 이해하면 첫 번째 표에있는 모든 제품으로 두 번째 표의 모든 날짜 중 cartesian product 번을 찾고 있습니다. cross join을 사용하여 만들 수 있습니다. 그럼 당신은 0으로 null 값을 변환하는 coalesce를 사용하여 SAMES의 AMT의 결과를 얻기 위해 outer join를 사용해야합니다 :

select t1.product, t2.enddate, coalesce(t3.saleamt,0) saleamt 
from (select distinct product 
     from table1) t1 
cross join (select distinct enddate 
      from table2) t2 
left join table1 t3 on t1.product = t3.product 
    and t2.enddate = t3.enddate 
+0

이 선택은 나에게 원하는 결과를 제공하지만, 어떻게 Table1에 각 제품의 누락 날짜 기록을 다시 넣었습니까? – svon

+0

@svon -'insert into ... select ... '를 사용하고 널 검사를 추가하십시오. 이렇게해야합니다 : http://sqlfiddle.com/#!3/64202/1 – sgeddes

+0

할 수 있었습니까? .... 고마워. – svon