Sql server 在SQL Server中使用逐月计数数据获取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

我正在创建一个查询,以获得12个月的名称,我还希望对UserLogin进行月份计数。我想在条形图中显示月份报表。所以我需要在SQLServer中创建一个查询。但我的问题是,我没有得到预期的12个月和计数。我一个月都在数一次

这是我的问题,你能帮我找出哪里有错吗=>

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