Ich verwende wählen:berechnen Summe bis fünf Jahre zurück in SQL Server
Select year, month, par1, par2, par3, value
from table1
diese Tabelle zu erzeugen, zurück (es ist 60 Monate).
Ergebnis sollte wie unten sein:
Wie kann ich das tun?
Ich verwende wählen:berechnen Summe bis fünf Jahre zurück in SQL Server
Select year, month, par1, par2, par3, value
from table1
diese Tabelle zu erzeugen, zurück (es ist 60 Monate).
Ergebnis sollte wie unten sein:
Wie kann ich das tun?
für Sie Fall, da die Tabellen in Zeichenfolge sind, verwendet i einen CTE ein Datum Spalte für die erforderliche Berechnung zu formulieren
; with
cte as
(
select *, date = convert(date, year + '-' + substring(month, 2, 2) + '-01', 121)
from table1
)
select *
from cte c
outer apply
(
select SumOfValue = sum(Value)
from cte x
where x.date >= dateadd(month, -60, c.date)
and x.date <= c.date
) t
, wenn Sie die Summe() zu einer Gruppe von anderen Spalte benötigen, fügen Sie die Bedingung für die OUTER APPLY Abfrage
EDIT 1:
select *
from cte c
outer apply
(
select SumOfValue = sum(x.Value)
from cte x
where x.date >= dateadd(month, -60, c.date)
and x.parameter1 = c.parameter1
and x.parameter2 = c.parameter2
and x.date <= c.date
) t
dateadd (monat, -60, c.date) -> sollte ich hier monat bis datum konvertieren? weil ich einen Fehler bekommen habe "'Datum' ist keine anerkannte Dateadd Option." – 4est
Sie verwenden 'SQL Server 2008' richtig? das sollte funktionieren. Wenn nicht in der cte verwenden Sie "Datum = konvertieren (DatumZeit, ...)" – Squirrel
ja, SQL Server 2008 .... können Sie bitte Ihre Abfrage oben aktualisieren? – 4est
Sie Monat Spalte ist ein String? irgendeine Datumsspalte oder Ganzzahl? – Squirrel
Wie bestimmen Sie, in welchem Jahr die fünfjährige Zeitspanne beginnen soll? –
ja: Jahr, Monat, Par1, Par2, Par3 sind String – 4est