尝试使用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)
答案 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 (从手机发送)