按月计数选择

时间:2013-03-20 04:00:45

标签: sql sql-server-2008 select count case

我有皮卡表,试图写一份报告,告诉我一年中每个月有多少皮卡。
看起来应该是这样的 enter image description here

到目前为止,我有这个

  SELECT
DATEPART(MONTH, PickupDate)as 'Month',
count (CASE WHEN DATEPART(YEAR, PickupDate) = 2012 THEN 1 ELSE 0 end)as 'Pickups'
,count (CASE WHEN CategCode  = 'NB' and DATEPART(YEAR, PickupDate) = 2012  THEN 1 ELSE 0 end) as 'Newborn'
FROM dbo.Pickup 
where DATEPART(YEAR, PickupDate) = 2012
group by DATEPART(MONTH, PickupDate)

WITH ROLLUP

我无法弄清楚如何计算新生儿专栏,任何想法? 到目前为止,我的查询计算得不对,只计算从皮卡表中的所有皮卡 enter image description here

1 个答案:

答案 0 :(得分:1)

COUNT更改为SUM或将ELSE 0更改为ELSE NULL

COUNT(0,1,0) = 3,SUM(0, 1, 0) = 1,COUNT(NULL,1,NULL) = 1

如果我可以提供另一个提示,请尝试使用日期比较而不是DATEPART函数重写查询 - 使用此函数将阻止优化器使用索引。这里有一个日历表。