Ich versuche, eine laufende Summe mit OVER (PARTITION BY) zu erstellen, um eine laufende Summe zu erstellen.Laufende Summe Für den Datensatz gruppiert nach Monat, Jahr
Meine ursprüngliche Abfrage:
SELECT DATEPART(MONTH, t.received_date) AS [Month],
DATEPART(YEAR, t.received_date) AS [Year],
SUM(rdai.number_of_pages) AS [Count]
FROM dbo.request_document_additonal_information AS [rdai]
INNER JOIN #TempRequestIDs AS [t]
ON rdai.request_id = t.id
GROUP BY DATEPART(MONTH, t.received_date),
DATEPART(YEAR, t.received_date)
ORDER BY Year,
Month;
Und die Ergebnisse:
Month Year Count
10 2015 1202342
11 2015 1059471
12 2015 1142629
1 2016 1081412
2 2016 1181385
3 2016 1334966
Mein Ziel ist es, eine laufende Zwischensumme für jeden Monat und mein Versuch zu schaffen, dies zu tun:
SELECT DATEPART(MONTH, t.received_date) AS [Month],
DATEPART(YEAR, t.received_date) AS [Year],
SUM(rdai.number_of_pages) AS [Count]
,SUM(rdai.number_of_pages) OVER (PARTITION BY DATEPART(MONTH, t.received_date), DATEPART(YEAR, t.received_date)
ORDER BY DATEPART(MONTH, t.received_date), DATEPART(YEAR, t.received_date)
RANGE UNBOUNDED PRECEDING
) as [RunningTotal]
FROM dbo.request_document_additonal_information AS [rdai]
INNER JOIN #TempRequestIDs AS [t]
ON rdai.request_id = t.id
GROUP BY DATEPART(MONTH, t.received_date),
DATEPART(YEAR, t.received_date)
ORDER BY Year,
Month;
Aber der Fehler zurückgegebene Zustände:
Column 'dbo.request_document_additonal_information.number_of_pages' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Und wenn ich GROUP BY .... rdai.number_of_pages
hinzufügen, wird die laufende Summe aufgelistet, aber es ist die gleiche Anzahl für alle Spalten.
Kann ich mithilfe dieser Fensterfunktion Hilfe bekommen, wo ich falsch liege?
Danke,
Dank John - das funktioniert aber es zurückgesetzt wird, wenn das Jahr ändert. Gibt es einen Weg dahin? – MISNole
@MISNole Sicher. Entschuldigung, ich nahm an, du wolltest eine Änderung vornehmen. Siehe aktualisierte Antwort ... Entfernte Partition nach und änderte die Reihenfolge nach Jahr, Monat –
Danke - in diesem Fall brauchte ich keinen Reset, aber ich werde beide Beispiele für zukünftige Verwendung speichern. Ich schätze es. – MISNole