sql - 对一列进行分组并获取该列的总和

标签 sql sql-server group-by

我有一张 table :

------------------------------------
ReportDate  | DAGName | MailboxCount
------------------------------------

该表中有很多记录。我必须获取特定年份每个月第一天每个 dagName 的邮箱计数总和。

------------------------------------
ReportDate  | DAGName | MailboxCount
------------------------------------
01-01-2012  | abc     |  25
01-02-2012  | xyz     |  55
01-02-2012  | abc     |  125
01-03-2012  | lmn     |  225
01-01-2012  | ghf     |  325
01-03-2012  | kil     |  525
11-03-2012  | kil     |  525
21-03-2012  | kil     |  625
10-05-2012  | jil     |  225
20-11-2012  | kil     |  1525
04-03-2012  | Mil     |  5025

所以我想要的结果是

---------------------------------
Month Name     | Count
---------------------------------
 January       | 350
 Ferbuary      | 150
 March         | 850 

我的查询

SELECT SUM(MailboxCount) AS Count,DagName
              ,MONTH(CAST(ReportDate AS DATETIME))
              ,DATENAME(month, ReportDate)  AS 'Month Name'
        FROM MailboxDatabase
        WHERE (CONVERT(VARCHAR, CONVERT(VARCHAR(10), [ReportDate], 103), 103)
        IN ( '01/01/'+ @year,'01/02/'+ @year,
             '01/03/'+ @year,'01/04/'+ @year,
             '01/05/'+ @year,'01/06/'+ @year,
             '01/07/'+ @year,'01/08/'+ @year,
             '01/09/'+ @year,'01/10/'+ @year,
             '01/11/'+ @year,'01/12/'+ @year 
            ))
        GROUP BY  MONTH(CAST(ReportDate AS DATETIME)),DATENAME(month, ReportDate),DagName  
        ORDER BY 2

如果我的查询附带一些额外的列,我很好。但它没有给我正确的结果。有什么帮助吗??

最佳答案

我可能完全误解了这个问题,但以下内容还不够吗?

  SELECT  [Month Name] = DATENAME(month, ReportDate), [Count] = SUM(MailboxCount)
  FROM    MailboxDatabase
  WHERE   DAY(ReportDate) = 1
          AND YEAR(ReportDate) = 2012
  GROUP BY
          DATENAME(month, ReportDate)

测试脚本

;WITH MailboxDatabase AS (
  SELECT * FROM (VALUES
      ('01-01-2012', 25)
    , ('02-01-2012', 55)
    , ('02-01-2012', 125)
    , ('03-01-2012', 225)
    , ('01-01-2012', 325)
    , ('03-01-2012', 525)) AS X(ReportDate, MailboxCount)
)
  SELECT  [Month Name] = DATENAME(month, ReportDate)
          , [Count] = SUM(MailboxCount)
          , Month = MONTH(ReportDate)
  FROM    MailboxDatabase
  WHERE   DAY(ReportDate) = 1
          AND YEAR(ReportDate) = 2012
  GROUP BY
          DATENAME(month, ReportDate), MONTH(ReportDate)
  ORDER BY
          MONTH(ReportDate)

关于sql - 对一列进行分组并获取该列的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16436905/

相关文章:

sql - oracle sql创建组契约(Contract)一个表而不重复

mysql - 将数据 GridView 行添加到 vb.net 中的 sql 表

sql - bigquery按除几列外的所有列分组

sql - 从表中插入/查询数据时出现 ORA-00904

mysql - 如何选择与随机列 MYSQL 不同的?

sql - 使用sql server存储过程对记录进行分页

sql-server - SSMS/SSRS - 从查询中获取 SSRS 数据集使用的存储过程名称

sql-server - 精美的 SSRS pdf 报告示例

python - 按列分组并找到每组的最小值和最大值

sql - 如果有多个Position,则只找到主要的Position,否则取另一个Position