2

我有一张桌子:

------------------------------------
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

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

4

4 回答 4

3

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

  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)
于 2013-05-08T09:27:02.393 回答
1
SELECT DATENAME(MONTH, CONVERT(DATETIME, ReportDate, 105)) Month, 
       SUM(MailboxCount) COUNT
FROM   tableName
GROUP  BY DATENAME(MONTH, CONVERT(DATETIME, ReportDate, 105))

更新 1

SELECT DATENAME(MONTH, CONVERT(DATETIME, ReportDate, 105)) Month, 
       SUM(MailboxCount) COUNT
FROM   tableName
WHERE  (CONVERT(VARCHAR(15), CONVERT(DATETIME, ReportDate, 105), 103)
        IN ( '01/01/'+ '2012','01/02/'+ '2012',
             '01/03/'+ '2012','01/04/'+ '2012',
             '01/05/'+ '2012','01/06/'+ '2012',
             '01/07/'+ '2012','01/08/'+ '2012',
             '01/09/'+ '2012','01/10/'+ '2012',
             '01/11/'+ '2012','01/12/'+ '2012' 
            ))
GROUP  BY MONTH(CONVERT(DATETIME, ReportDate, 105)),
          DATENAME(MONTH, CONVERT(DATETIME, ReportDate, 105))
ORDER  BY MONTH(CONVERT(DATETIME, ReportDate, 105))
于 2013-05-08T09:27:09.853 回答
1

试试这个——

询问:

SET DATEFORMAT dmy

DECLARE @temp TABLE
(
      ReportDate DATETIME
    , DAGName NVARCHAR(50)
    , MailboxCount INT
)

INSERT INTO @temp (ReportDate, DAGName, MailboxCount)
VALUES 
    ('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)

DECLARE @year INT = 2012

SELECT 
      [Count] = SUM(MailboxCount)
    , Month_Name = DATENAME(MONTH, ReportDate)
FROM @temp
WHERE DAY(ReportDate) = 01 
    AND YEAR(ReportDate) = @year
GROUP BY ReportDate
ORDER BY ReportDate

输出:

Count       Month_Name
----------- ------------------------------
350         January
180         February
750         March
于 2013-05-08T09:29:55.300 回答
0
SELECT 
      DATENAME(MONTH, CONVERT(DATETIME, ReportDate, 105)) AS [MonthName],
      YEAR(CONVERT(DATETIME, ReportDate, 105)) AS [Year],
      SUM(MailboxCount) COUNT
FROM tableName
GROUP BY 
      DATENAME(MONTH, CONVERT(DATETIME, ReportDate, 105)),
      YEAR(CONVERT(DATETIME, ReportDate, 105))

试试上面的 sql 查询,这个查询返回按年计算的月份和计数的结果。

于 2013-05-08T09:45:34.603 回答