2016-07-29 1 views
0

집계에 선 존재하고 나는이의 요청에 의한이 테이블 집계 해요 :SQL은 - 포함하지 않은 내가 주문 테이블이

SELECT dtdate, idsku, sum(vlorder) as vlorder, sum(qtditem) as qtditem 
FROM order 
GROUP BY dtdate, idsku 

그리고이 결과를 받고 있어요 :

dtdate idsku vlorder qtditem 
01/01/2016 1 4 8 
02/01/2016 1 5 10 
03/01/2016 1 3 6 
04/01/2016 1 2 4 
05/01/2016 1 3 6 
06/01/2016 1 1 2 

그러나 데이터베이스에 없기 때문에 07/01/2016 및 idsku = 1에 대한 결과가 없습니다 (더미 소리). 그리고이 "빈"줄을 포함해야합니다. 07/01/2016 1 0 0, 다음과 같이 :

dtdate idsku vlorder qtditem 
01/01/2016 1 4 8 
02/01/2016 1 5 10 
03/01/2016 1 3 6 
04/01/2016 1 2 4 
05/01/2016 1 3 6 
06/01/2016 1 1 2 
07/01/2016 1 0 0 

이게 가능합니까? 포스트 그레스에서

+0

캘린더 테이블 (google it)을 사용하고 '왼쪽 가입'을 선택하여 모든 날짜를 가져와야합니다. 'ISNULL' 또는'COALESCE'로'NULL'을'0'으로 바꿀 수 있습니다. – HoneyBadger

+0

저는 이것을하고 있어요. 07/01/2016 \t Null \t Null \t Null. 병합 할 줄에 idsku가 없습니다. –

답변

0

, 당신은 generate_series()를 사용할 수 있습니다

select g.mon, o.idsku, 
     sum(o.vlorder) as vlorder, sum(o.qtditem) as qtditem 
from generate_series('2016-01-01'::timestamp, '2016-07-01'::timestamp, 
        interval '1' month) g(mon) left join 
    orders o 
    on o.dtdate = g.mon 
group by g.mon, idsku; 

을 날짜는 매월 첫 번째에없는 경우에, 당신은 date_trunc('day', o.dtdate) = g.mon를 사용할 수 있습니다.

+0

주문에 '2016-07-01'날짜가 없어서 idsku가 null이고 값을 알아야합니다. 가능하니? –

+0

@ gabriel.almeida. . . 나는 당신의 의견을 이해하지 못합니다. –