我有一个订单表,我通过这个查询汇总了这个表:
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 :(得分:0)
在Postgres中,您可以使用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
。