Sql server 在SQL Server中使用逐月计数数据获取12个月的当前年份?
我正在创建一个查询,以获得12个月的名称,我还希望对UserLogin进行月份计数。我想在条形图中显示月份报表。所以我需要在SQLServer中创建一个查询。但我的问题是,我没有得到预期的12个月和计数。我一个月都在数一次 这是我的问题,你能帮我找出哪里有错吗=>Sql server 在SQL Server中使用逐月计数数据获取12个月的当前年份?,sql-server,Sql Server,我正在创建一个查询,以获得12个月的名称,我还希望对UserLogin进行月份计数。我想在条形图中显示月份报表。所以我需要在SQLServer中创建一个查询。但我的问题是,我没有得到预期的12个月和计数。我一个月都在数一次 这是我的问题,你能帮我找出哪里有错吗=> SELECT FORMAT(dateadd(MM, T.i, getdate()),'MMMM') AS DateColumn, uf.TotalCount FROM (VALUES (-11),(-10
SELECT
FORMAT(dateadd(MM, T.i, getdate()),'MMMM') AS DateColumn,
uf.TotalCount
FROM
(VALUES (-11),(-10),(-9),(-8),(-7),(-6), (-5), (-4), (-3), (-2), (-1), (0)) AS T(i)
OUTER APPLY
(SELECT
COUNT(datepart(MM, InsertDateTime)) AS TotalCount
FROM
User
WHERE
DATEDIFF(mm, InsertDateTime, DATEADD(day, T.i, GETDATE())) = 0
AND IsLogin = 1) uf
这是我在表格中的数据:
UserId | IsLogin | InsertDateTime
-------+---------+---------------------------
1 1 2017-08-22 16:12:46.713
2 1 2017-08-22 16:50:55.789
3 1 2017-07-10 16:12:46.713
4 1 2017-07-10 16:12:46.713
5 1 2017-06-21 16:12:46.713
6 1 2017-06-04 16:12:46.713
7 1 2017-06-05 16:12:46.713
8 1 2016-09-05 16:12:46.713
9 1 2016-09-05 16:12:46.713
10 1 2016-10-05 16:12:46.713
11 1 2016-11-05 16:12:46.713
这是我当前的输出:
DateColumn | TotalCount
------------+--------------
September 1
October 1
November 1
December 1
January 1
February 1
March 1
April 1
May 1
June 1
July 1
August 1
我的预期输出应该是:
DateColumn | TotalCount
------------+--------------
January 0
February 0
March 0
April 0
May 0
June 3
July 2
August 2
September 0
October 0
November 0
December 0
请告诉我我的问题在哪里。谢谢请修改您的查询,如下所示:
SELECT *
FROM (
SELECT FORMAT(dateadd(MM, T.i, getdate()), 'MMMM') AS DateColumn --, uf.TotalCount
FROM (
VALUES (- 11)
,(- 10)
,(- 9)
,(- 8)
,(- 7)
,(- 6)
,(- 5)
,(- 4)
,(- 3)
,(- 2)
,(- 1)
,(0)
) AS T(i)
) A
LEFT JOIN (
SELECT datename(month, calcdate) datecol
,count(*) #trxns
FROM EmployeeMTDResults
WHERE calcdate BETWEEN '2017-03-01'
AND getdate()
GROUP BY datename(month, calcdate)
) b ON (b.datecol = a.DateColumn)
你能试试这样的吗
在代码中进行一些修改之后
SELECT FORMAT(dateadd(MM, T.i, getdate()),'MMMM') AS DateColumn,case when TotalCount is null then 0 else TotalCount end as TotalCount
FROM (VALUES (-11),(-10),(-9),(-8),(-7),(-6), (-5), (-4), (-3), (-2), (-1), (0)) AS T(i)
OUTER APPLY
(
SELECT distinct Count(datepart(MM,InsertDateTime)) AS TotalCount
FROM user1
WHERE Datediff(mm,InsertDateTime, dateadd(month, T.i, getdate())) = 0 and IsLogin = 1
) uf
order by DATEPART(MM,convert(datetime,FORMAT(dateadd(MM, T.i, getdate()),'MMMM') +'01 2017',110))
输出-
DateColumn TotalCount
January 0
February 0
March 0
April 0
May 0
June 3
July 2
August 2
September 0
October 0
November 0
December 0
@marc_s你能告诉我问题在哪里吗?请在你的申请中用天而不是月来抵消你的dateadd呼叫。@Damien_不信者你的意思是我需要这样的更改dateaddmm,T.i,getdate right???@Damien_不信者这样我的计数是正确的,但月份不是正确的,所以我的错误在哪里你知道吗?嗯,我更喜欢月份而不是mm。我永远无法理解人们对缩写组件名称的偏好,因为实际的组件名称并不长,而且代码可读性更高。但本质上是的。目前,您的应用程序(针对所有12行)正在查找与过去12天发生在同一个月内的值。是的,这非常好。但是你是否在这里传递“01 2017”静态日期,所以每次都得到2017年12个月,那么这里如何添加动态年份?我只使用静态日期作为完成日期,如果你动态计算,那么同样的结果也会出现。需要按月订购,因此添加动态年份时无需进行更多计算。您好,我想从您那里得到一些建议,我可以问一下吗?在哪里条件下,dateaddmonth,T.i,getdate现在当前月份为8 ok。这里T.i值取0,1,2,3,4,5,6,7,没关系。但是-8 take mean是指2016年的月份,那么如何只获取当前年份的月份呢?请在where DatediffDAY、DATEADDm、DATEDIFFm、0、InsertDateTime、0、dateaddmonth、T.i、DATEADDm、DATEDIFFm、0、GETDATE中进行尝试,0=0使用您的解决方案,我只获取当前月份的数据,无法获取第二个月的数据,因此请给我一些提示,如何在查询中实现全年月份数据
SELECT FORMAT(dateadd(MM, T.i, getdate()),'MMMM') AS DateColumn,case when TotalCount is null then 0 else TotalCount end as TotalCount
FROM (VALUES (-11),(-10),(-9),(-8),(-7),(-6), (-5), (-4), (-3), (-2), (-1), (0)) AS T(i)
OUTER APPLY
(
SELECT distinct Count(datepart(MM,InsertDateTime)) AS TotalCount
FROM user1
WHERE Datediff(mm,InsertDateTime, dateadd(month, T.i, getdate())) = 0 and IsLogin = 1
) uf
order by DATEPART(MM,convert(datetime,FORMAT(dateadd(MM, T.i, getdate()),'MMMM') +'01 2017',110))
DateColumn TotalCount
January 0
February 0
March 0
April 0
May 0
June 3
July 2
August 2
September 0
October 0
November 0
December 0