2012-04-05 9 views
5

Non riesco a capire il bug di questo codice.Come posso utilizzare OVER e ORDER BY

CODICE:

SELECT 
    CariID, HesapID, BTrh, BCinsiID, BNo, Acklm, VdTrh, mTrh, BorcT, AlacakT, 
    SUM(BorcT) OVER (PARTITION BY CariID, HesapID ORDER BY BTrh, BNo, mTrh) AS TopBorcT, 
    SUM(AlacakT) OVER (PARTITION BY CariID, HesapID ORDER BY BTrh, BNo, mTrh) AS TopAlacakT 
FROM 
    tCariH 

ERRORE:

Msg 102, Level 15, State 1, Line 3

Incorrect syntax near 'order'.

+1

Quale versione di SQL Server? Credo che la sintassi che hai mostrato funzioni solo nel 2012 (e probabilmente nelle versioni successive, che non esistono ancora) –

risposta

2

Con una funzione di aggregazione come SUM, you don't use ORDER BY in the OVER clause - avete solo bisogno di utilizzare la funzione PARTITION. Il ORDER viene utilizzato per le funzioni di ranking:

Depending on the ranking, aggregate, or analytic function used with the OVER clause, <ORDER BY clause> and/or the <ROWS and RANGE clause> may not be supported.

Basta modificare per rimuovere il ORDER in entrambe le aggregati e si dovrebbe andare bene.

+3

È * possibile * utilizzare un ORDER BY con sum() o avg(). Quindi creerà una somma "in esecuzione" (o media) fino alla "riga corrente". A meno che Oracle e PostgreSQL SQL Server non lo supportino fino ad ora. Solo con il nuovissimo SQL Server 2012 questo è supportato –

+1

@a_horse_with_no_name - Grazie per le informazioni, non mi ero accorto di averlo modificato nel 2012 – JNK

+0

ID Account ID Quantità 1 1 10 Somma = 10 2 1 5 = 10 + 5 = 15 3 1 2 = 10 + 5 + 2 = 17 4 2 7 = 7 5 2 3 = 7 + 3 = 10 SELECT MATR, AccountID, Quantità, SUM (Quantità) OVER (PARTITION BY AccountID) AS TopBorcT , DA tCariH – serkan

0
ID  AccountID  Quantity 
1   1    10   Sum = 10 
2   1    5    = 10 + 5 = 15 
3   1    2    = 10 + 5 + 2 = 17 
4   2    7    = 7 
5   2    3    = 7 + 3 = 10 

SELECT ID, AccountID, Quantity, 
     SUM(Quantity) OVER (PARTITION BY AccountID) AS TopBorcT, 
FROM tCariH 
Problemi correlati