显示截至当月的所有月份的计数,包括零计数

时间:2018-11-22 09:01:12

标签: sql sql-server date sql-server-2008 datetime

我当前的查询基于检索到的2018年数据:

SELECT DATENAME(MONTH, STARTDATE) AS MonthName, COUNT (*) AS TOTAL
FROM TABLEUSERS
WHERE YEAR(STARTDATE) = '2018'
GROUP BY MONTH(STARTDATE), DATENAME(MONTH,STARTDATE)

结果:

MonthName | TOTAL
January   |  25
February  |  20 
March     |  40
April     |  11 
May       |  30 
June      |  0
July      |  0 
August    |  0
September |  7
October   |  55
November  |  13
December  |  0

如您所见,它正在检索列表中的 December (2018年12月),并且我不想显示12月,我只想查看我们去过的所有月份的数据到(截止到现在的11月)。

结果还必须包含计数为零的月份。

1 个答案:

答案 0 :(得分:1)

在SQL Server 2008(我认为)中,您可以使用以下内容:

SELECT DATENAME(MONTH, d) AS MonthName, COUNT(STARTDATE) AS Total
FROM (VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11)) AS numbers(n)
CROSS APPLY (SELECT DATEADD(MONTH, n, '2018-01-01')) AS dates(d)
LEFT JOIN TABLEUSERS ON YEAR(STARTDATE) = YEAR(d) AND MONTH(STARTDATE) = MONTH(d)
WHERE n < MONTH(GETDATE())
GROUP BY d

有一个0到11之间的数字(硬编码)列表,可让您生成12个日期。休息很简单。