grouper par sur une colonne et get la sum de cette colonne

J'ai une table

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

Il y a beaucoup d'loggings dans ce tableau. Je dois get la sum de mailboxcount de chaque nom de dag le 1er jour de chaque mois pour une année donnée.

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

Donc ce que je veux comme résultat est

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

Ma requête

 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 

Je vais bien si certaines colonnes supplémentaires comme venir avec ma requête. Mais cela ne me donne pas le bon résultat. De l'aide ??

Je pourrais être complètement en train d'interpréter la question mais ne suffirait-il pas?

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

Script de test

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

Essaye celui-là –

Question:

 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 

Sortie:

 Count Month_Name ----------- ------------------------------ 350 January 180 February 750 March 
 SELECT DATENAME(MONTH, CONVERT(DATETIME, ReportDate, 105)) Month, SUM(MailboxCount) COUNT FROM tableName GROUP BY DATENAME(MONTH, CONVERT(DATETIME, ReportDate, 105)) 
  • SQLFiddle Demo
  • SQLFiddle Demo ( avec la clause ORDER BY )

MISE À JOUR 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)) 
 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)) 

Essayez ci-dessus sql query, cette requête renvoie le résultat avec le mois de l'année et count.