【问题标题】:Show counts for all months up to current month including zero counts显示截至当前月份的所有月份的计数,包括零计数
【发布时间】:2019-04-24 21:58:07
【问题描述】:

我当前的查询基于检索 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 年的 12 月,我不想显示 12 月,我只想查看过去所有月份的数据通过(截至目前的 11 月)。

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

【问题讨论】:

  • 然后添加条件AND MONTH(STARTDATE) <= MONTH(GETDATE())
  • 该查询不会产生该结果。所以我不确定你在这里要求什么。
  • @Squirrel 这工作正常,但它实际上也删除了零计数之间的月份,我怎样才能只在即将到来的月份做到这一点

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


【解决方案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 个日期。休息是直截了当的。

【讨论】:

  • 我收到此错误:'EOMONTH' 不是可识别的内置函数名称。我正在使用 mSSQL
  • @MishMish - 然后指定您正在使用的 SQL Server 的 版本。因为它自 2012 年版本以来一直存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多