2012-10-31 13 views
9

Ich habe ein Sales-Budget für jeden Handelstag des Monats. Also für Tag 1 das Budget beträgt 300, für Tag 2 das Budget beträgt 400, und dann Monat bisher Budget ist 700. Ich diesen Fehler in meiner Anfrage: Incorrect syntax near 'ROWS'."Falsche Syntax" Fehler mit OVER()

select 
TradingDate 
,Budget 
,sum(Budget) over (PARTITION BY TradingDate 
order by TradingDate asc 
ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING),1) AS BudgetMTD 
from #4 
+10

, dass 2012 Syntax ist. Sie verwenden wahrscheinlich eine frühere Version. (Obwohl Sie auch ein unübertroffenes ', 1)' haben. –

+0

Ja ich benutze 2008, danke wird untersucht – Wilest

+0

Für 2008 siehe http://stackoverflow.com/questions/860966/calculate-a-running-total-in-sqlserver –

Antwort

2

Ihre Anfrage wird man die Summe der einzelnen Tagesbetrag, mit dem nächsten Betrag am selben Tag (Ihre Partition und Reihenfolge nach sind auf demselben Feld). Dies ist erlaubt, aber es bedeutet eines von drei Dingen:

  1. Das TradingDate ist ein Datum, mit mehreren Werten an jedem Datum. Wenn ja, ist die Summe unbestimmt, da Sie nicht wissen, welchem ​​Sie folgen würden.
  2. TradingDate ist schlecht benannt, und es ist wirklich eine Datumsangabe. In diesem Fall erhalten Sie den nächsten Datumswert am selben Tag.
  3. Ihre Abfrage ist falsch und Sie meinen nicht "Partition von TradingDate Auftrag von TradingDate".

Ich würde spekulieren, dass Sie eines von zwei Dingen wollen. Der erste wäre die Summe des Tagesbudgets mit dem nächsten Tag. Der andere wäre eine kumulative Summe.

Es gibt die Möglichkeit, dass Sie mehrere Zeilen pro Tag haben und die Summe des Budgets an diesem Tag möchten. Wenn das der Fall ist, dann können Sie die einfachere Formulierung verwenden:

select TradingDate, Budget, 
     sum(Budget) over (PARTITION BY TradingDate) AS BudgetMTD 
from #4 
2

Ok kam ich mit einer Unterabfrage Lösung:

select TradingDate, Budget, 
RunningTotal = (select sum(Budget) from #4 s2 
where s2.TradingDate<= s1.TradingDate) 
from #4 s1 
order by s1.TradingDate