2016-04-06 23 views
0

Ich schreibe eine Funktion, um die Gesamtzahl der Mails in jedem Monat zu berechnen. Mit der Funktion Gruppieren nach DATEADD werden jedoch nur die Nicht-O-Zählwerte abgerufen. Ich muss alle Werte innerhalb der 0 Zähler erhalten.Gruppierung mit der DATEADD für gewünschtes Ergebnis

SELECT (MAX (ReceivedMonthofYear) +‘‚+ MAX (ReceivedYear)) als MonthStartDate, COUNT (ReceivedDateTime) AS MonthlyTotal FROM tblMessageReceived GROUP BY DATEADD (Monat, DATEDIFF (Monat, 0, ReceivedDateTime), 0)

Dies führte Abfrage Out put of the query

Eigentlich auch mit auch 0 Zählwerte und Monate möchte ich die Ausgabe der alle Werte in angegebenen Bereich erhalten.

Danke!

+0

Sie benötigen einen 'DATE' Tabelle alle verfügbaren Termine enthält. – sagi

+0

@sagi Verwenden Sie die gesamte DATE-Tabelle, wie Sie das tun. Bei Verwendung der DATE-Tabelle Left OUTERJOIN mit tblMessageReceived. –

+0

Wenn Sie eine Dattentabelle haben, wählen Sie aus und linken Sie die Verbindung zu Ihrer Abfrage, und verwenden Sie ISNULL, um Null durch 0 zu ersetzen 0 – sagi

Antwort

1
SELECT td.monthCol+' '+td.yearCol AS MonthStartDate, 
     isnull(MonthlyTotal,0) AS MonthlyTotal 
FROM tblDates td 
LEFT OUTER JOIN (SELECT (MAX(ReceivedMonthofYear)+' '+MAX(ReceivedYear)) AS MonthStartDate, 
         COUNT(ReceivedDateTime) AS MonthlyTotal 
       FROM tblMessageReceived 
       GROUP BY DATEADD(month, DATEDIFF(month, 0, ReceivedDateTime), 0)) tm 
ON (td.monthCol+' '+td.yearCol = tm.MonthStartDate) 

die Sie interessieren, ersetzen MonthCol und YearCol mit Ihrem Datum Tabellenspaltennamen

+0

Danke für Ihre Hilfe, es funktioniert jetzt –