我当前的查询基于检索到的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月)。
结果还必须包含计数为零的月份。
答案 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个日期。休息很简单。