如果使用COUNT-GROUP BY没有结果,则返回零

时间:2019-07-16 18:30:23

标签: sql sql-server aggregate

尝试使用SQL创建季度报告,该报告显示细分为几个月的特定犯罪(即“闯入”)的发生次数。如果该特定犯罪在特定月份没有发生,我希望它显示为零。该SQL语句仅使用一个表,而不连接任何其他表。

我尝试使用CASE语句而没有任何积极结果。

案例数(DATE_OCCU)> = 0然后以0的数量结束其他事件(DATE_OCCU)

onblur

输出显示如下

select 
    datename(month,date_occu) as MonthName, 
    datepart(mm,date_occu) as MonthNumber,
    count(date_occu) as Quantity

from crimes.rms4gis.dbo.tmprms4gisall 
where datediff(mm,date_occu,getdate()) between 1 and 3 and agency='WCSO' and 
offense='DEATH INVESTIGATION' 

group by MonthName, MonthNumber
order by MonthNumber

我想显示结果如下...

MonthName  |  MonthNumber  |  Quantity
______________________________________
May        |       5       |     1
June       |       6       |     3

任何帮助将不胜感激。 SQL的一些新功能。

加里多(J Garrido)

2 个答案:

答案 0 :(得分:0)

假设表中有您想要的月份的一些数据,则可以切换到条件汇总:

select datename(month, date_occu) as MonthName, 
       datepart(month, date_occu) as MonthNumber,
       sum(case when agency = 'WCSO' and offense = 'DEATH INVESTIGATION' then 1 else 0 end) as Quantity
from crimes.rms4gis.dbo.tmprms4gisall 
where datediff(month, date_occu, getdate()) between 1 and 3 
group by datename(month, date_occu), datepart(month, date_occu)
order by MonthNumber;

还有其他一些方法涉及生成三个月的时间。但是,这需要更为复杂的查询。上面是一个简单的解决方案,应该可以在这种情况下以及其他许多情况下使用。

答案 1 :(得分:0)

如果从四月起没有行,将不会创建任何组。 如果要包括“缺少的月份”,则必须提供月份列表并对表执行外部联接,以便将所有月份都返回。 您没有指定要使用的引擎,因此我无法提供完整的解决方案。您可以创建一个包含12行的Months表并加入该表,也可以动态地使用VALUES行构造函数,如下所示:

... FROM(VALUES(1),(2),(3)...)作为M(月)左外部联接yourtable作为x在m.month = x.datepart ....

HTH (从手机发送)