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

Show counts for all months up to current month including zero counts

我当前基于检索 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

如您所见,它正在检索列表中 2018 年的 December,我不想显示 12 月,我只想查看所有我们已经度过了几个月(截至目前为 11 月)。

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

在 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 个日期。休息是直截了当的。