我有一张桌子:
------------------------------------
ReportDate | DAGName | MailboxCount
------------------------------------
此表中有很多记录。我必须在特定年份的每个月的第一天获得每个dagName的mailboxcount的总和。
------------------------------------
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
我很好,如果有一些额外的列,如我的查询。但它没有给我正确的结果。任何帮助?
答案 0 :(得分: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)
答案 1 :(得分: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))
答案 2 :(得分: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
答案 3 :(得分: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查询,此查询以年度月份和计数返回结果。