获取SQl的月度报告,即使为空

时间:2015-06-30 11:44:35

标签: sql sql-server

我正在尝试使用此查询获取我的表的月度报告

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,我需要得到所有结果事件。

2 个答案:

答案 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。您可以通过多种方式生成此内容:

  • 您可能有一张日期表。
  • 您可以使用递归CTE生成日期。
  • 您可以明确列出日期。

然后查询类似于:

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))