SQL - 在聚合中包含不存在的行

时间:2016-07-29 12:52:38

标签: sql postgresql

我有一个订单表,我通过这个查询汇总了这个表:

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

这可能吗?

1 个答案:

答案 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