我正在尝试使用此查询获取我的表的月度报告
select
month(date_reception),
count(mc_object)
from
[full]
where
date_reception > '2015-01-01'
and date_reception < '2015-06-26'
and mc_object LIKE '%obj1%'
group by
(month(date_reception))
它工作正常,但它只给我一些月份的行与0不同的结果,如果对象的数量为0,我需要得到所有结果事件。
答案 0 :(得分:1)
假设您拥有所有月份的数据 - 而不是特定对象的数据 - 那么最简单的方法是使用条件聚合:
select month(date_reception) ,
sum(case when mc_object LIKE '%obj1%' then mc_object else 0 end)
from [full]
where date_reception > '2015-01-01' and
date_reception < '2015-06-26'
group by month(date_reception)
(注意你也应该包括年份。)
如果这个假设不成立,那么您需要一个日期列表和left join
。您可以通过多种方式生成此内容:
然后查询类似于:
select month(d.date) ,
sum(case when mc_object LIKE '%obj1%' then mc_object else 0 end)
from dates d left join
[full] f
on d.date = f.date_reception
where d.date > '2015-01-01' and
d.date < '2015-06-26'
group by month(d.date)
答案 1 :(得分:0)
这应该有效
select
month(date_reception),
count(mc_object)
from
[full]
where
date_reception > '2015-01-01'
and date_reception < '2015-06-26'
and (mc_object LIKE '%obj1%' OR mc_object is null)
group by
(month(date_reception))