【问题标题】:is it possible to Sum values grouped by month?是否可以对按月分组的值求和?
【发布时间】:2013-06-12 14:32:27
【问题描述】:

我有一个结构如下的 SQL Server 表:

Table name : calendar. 

列:

Calendar Date (smalldatetime)
Working Day (bit)

日历日期包含所有日期,格式为 yyyy-mm-dd。 工作日表示我有工作,如果是 1,如果是周末或节假日,则标记为 0。

我要检索的内容:

Month      No Working Days   Year
------------------------------------
January    22                2011
February   20                2011
March      22                2011
...
December   10                2011
January    15                2012

所有信息都在那里,但我只是不确定如何编写这样的查询,但我认为它的结构与此类似,并包含一些花哨的日期时间函数。是否

SELECT Sum(Working Day)
       GROUP BY (Not a clue)

【问题讨论】:

    标签: sql sql-server database group-by sum


    【解决方案1】:

    大概您有兴趣查找每年每个月的工作日并报告天数是哪个月份的。这将为您提供:

    SELECT YEAR([Calendar Date]) As [YEAR],
           Month([Calendar Date]) As [Month],
           SUM([Working Day] As [Working Days]
    FROM [Calendar]
    GROUP BY YEAR([Calendar Date]), 
             Month([Calendar Date]) 
    

    【讨论】:

    • 我喜欢这个答案,尽管每个人都是正确的。谢谢大家!
    【解决方案2】:

    您的查询应如下所示:

    SELECT Sum(Working Day)
    WHERE Working Day = 1
       GROUP BY MONTH(calenderDate)
    

    这将按照您的要求按月分组。 有关更多日期时间功能,您可以查看this link

    【讨论】:

      【解决方案3】:

      这样的事情应该可以工作:

      SELECT  DATENAME(month, [Calendar Date]) 'Month',
          COUNT(1) 'No Working Days', 
          YEAR([Calendar Date]) 'Year'
      FROM YourTable
      WHERE [Working Day] = 1
      GROUP BY DATENAME(month, [Calendar Date]), YEAR([Calendar Date])
      

      根据您的数据和您想要的结果,如果一个月没有任何工作日,此查询将不会返回该月的任何结果。相反,您可以使用类似 CASE 删除 WHERE 条件的东西:

      SELECT  DATENAME(month, [Calendar Date]) 'Month',
          COUNT(CASE WHEN [Working Day] = 1 THEN 1 END) 'No Working Days', 
          YEAR([Calendar Date]) 'Year'
      FROM YourTable
      GROUP BY DATENAME(month, [Calendar Date]), YEAR([Calendar Date])
      

      您可能根本不需要 case 语句 - 取决于您的表是否允许 NULL 用于您的位字段。如果它不允许NULLs,您可以只使用SUM([Working Day]),因为它会将 0 和 1 相加。

      【讨论】:

        【解决方案4】:

        试试这个......它与上面的大多数答案几乎相同,只是添加了 order by

        SELECT YEAR(calendar_date) As [Year],
        MONTH(calendar_date) As [Month],
        SUM(working_day) As Working_Days
        FROM [calendar]
        GROUP BY YEAR(calendar_date) MONTH(calendar_date]) 
        ORDER BY [Year], [Month]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-02-17
          • 2013-12-11
          • 2023-04-04
          • 2019-02-14
          • 1970-01-01
          • 1970-01-01
          • 2011-02-25
          • 1970-01-01
          相关资源
          最近更新 更多