【问题标题】:I want to count how many requests were cancelled per month我想计算每个月有多少请求被取消
【发布时间】:2013-06-17 15:22:52
【问题描述】:

并将它们显示为每个月的总数。我使用以下脚本

SELECT datepart(yy,j.CompletedAt) as 'YY',  
       str(datepart(MM, j.CompletedAt),2) as 'MM', 
       Datename(MM,j.CompletedAt) as 'Month', 
       count('MM') as 'PMInMonth'
FROM facts_reactive.dbo.jobs j 
WHERE (
       (J.Reactive = -1)     
         AND datepart(yy,j.CompletedAt) = ' 2013'
         AND j.jobstatus = 6
       )
GROUP BY datepart(yy,j.CompletedAt),  
         str(datepart(MM, j.CompletedAt),2), 
         Datename(MM,j.CompletedAt)
ORDER BY datepart(yy,j.CompletedAt) ASC,  
         str(datepart(MM, j.CompletedAt),2) ASC;

但是,如果当月没有取消任何工作,则不会返回任何内容;而我希望将月份和 0 作为取消作业的数量返回。

这可能吗?

非常感谢。

罗伯

【问题讨论】:

  • 您使用的是什么数据库系统?
  • 请也提供版本

标签: sql group-by sum


【解决方案1】:
;WITH cMONTHS AS
(
    SELECT
        CAST('20130101' AS date) AS TheMonthStart,
        CAST('20130201' AS date) AS TheMonthEnd
    UNION ALL
    SELECT
        DATEADD(mm, 1, TheMonthStart),
        DATEADD(mm, 1, TheMonthEnd)
    FROM cMONTHS
    WHERE TheMonthStart < '20140101'
)
SELECT
   datepart(yy,c.TheMonthStart) as 'YY',  
   str(datepart(MM, c.TheMonthStart),2) as 'MM', 
   Datename(MM,c.TheMonthStart) as 'Month', 
   count(j.CompletedAt) as 'PMInMonth'
FROM
     cMONTHS c
     LEFT JOIN
     facts_reactive.dbo.jobs j ON j.CompletedAt >= c.TheMonthStart AND j.CompletedAt < c.TheMonthEnd
                   AND
                   J.Reactive = -1   
                   AND
                   j.jobstatus = 6
GROUP BY
   datepart(yy,c.TheMonthStart),  
   str(datepart(MM, c.TheMonthStart),2), 
   Datename(MM,c.TheMonthStart)
ORDER BY
   datepart(yy,c.TheMonthStart),  
   str(datepart(MM, c.TheMonthStart),2);

【讨论】:

  • 您的where 子句将否定left join
  • 您好 Gbn,感谢您的脚本。我在 SQL Server 2008 R2 中尝试过,它指出第 27 行的语法不正确,即关键字“as”附近的语法不正确。对于行 datepart(yy,c.TheMonthStart) as 'YY' 有什么想法吗?
  • @gbn 我做错了吗,因为我剪切并粘贴了您的脚本,现在收到错误列“cMONTHS.TheMonthStart”在 ORDER BY 子句中无效,因为它不包含在任何一个聚合中函数或 GROUP BY 子句。
  • @gbn 脚本返回次年 1 月的行集,这是否可以仅限于所选年份,从 1 月到 12 月(含)有 12 行?
  • 更改 WHERE TheMonthStart
猜你喜欢
  • 2016-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-24
  • 2023-04-10
  • 2021-06-30
  • 2022-10-05
相关资源
最近更新 更多