2012-10-31 13 views
9

Ho un budget di vendita per ogni giorno di trading del mese. Quindi, per il giorno 1 il bilancio è di 300, per il giorno 2 il bilancio è di 400, e poi il mese di budget data è 700. ottengo questo errore nel mio query: Incorrect syntax near 'ROWS'.Errore di "sintassi errata" con 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

Questo è il 2012 sintassi. Probabilmente stai usando una versione precedente. (Anche se hai un ineguagliato ', 1)' anche lì. –

+0

Sì, sto usando il 2008, grazie investigheremo su – Wilest

+0

Per il 2008, consultare http://stackoverflow.com/questions/860966/calculate-a-running-total-in-sqlserver –

risposta

2

Vostri criteri sta prendendo la somma di ogni importo del giorno, con l'importo successivo entro lo stesso giorno (la partizione e l'ordine sono nello stesso campo). Ciò è consentito, ma meanns una delle tre cose:

  1. Il TradingDate è una data, con i valori multipli su ogni data. Se è così, la somma è indeterminata, dal momento che non sai quale seguirebbe.
  2. TradingDate è mal chiamato, ed è davvero un orario. In questo caso, si ottiene il valore della data successiva, nella stessa data.
  3. La tua richiesta è errata e non intendi "partizione dell'ordine TradingDate di TradingDate".

Vorrei ipotizzare che tu voglia una delle due cose. Il primo sarebbe la somma del budget di un giorno con il giorno successivo. L'altro sarebbe una somma cumulativa.

Esiste la possibilità di avere più righe al giorno e si desidera la somma del budget per quel giorno. Se questo è il caso, quindi è possibile utilizzare la formulazione più semplice:

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

Ok mi si avvicinò con una soluzione di subquery:

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