2012-04-05 16 views
5

No puedo entender el error de este código.¿Cómo puedo usar OVER y ORDER BY

CÓDIGO:

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 

ERROR:

Msg 102, Level 15, State 1, Line 3

Incorrect syntax near 'order'.

+1

Qué versión de SQL Server? Creo que la sintaxis que ha mostrado solo funciona en 2012 (y probablemente en versiones posteriores, que aún no existen) –

Respuesta

2

Con una función de agregado como SUM, you don't use ORDER BY in the OVER clause - sólo tiene que utilizar la función PARTITION. El ORDER se utiliza para las funciones de clasificación:

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 con modificar para eliminar el ORDER tanto en sus agregados y que debe estar bien.

+3

Usted * puede * usar un ORDER BY con suma() o avg(). Luego creará una suma "en ejecución" (o promedio) hasta la "fila actual". Unlesse Oracle y PostgreSQL SQL Server no lo han soportado hasta ahora. Sólo con el nuevo SQL Server 2012 esto es compatible –

+1

@a_horse_with_no_name - Gracias por la información, no me di cuenta de que cambió en 2012 – JNK

+0

ID AccountID Cantidad 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, Cantidad, SUM (Cantidad) OVER (PARTITION BY AccountID) AS TopBorcT , DESDE 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 
Cuestiones relacionadas