2012-04-05 34 views
5

我无法理解此代码的错误。我如何使用OVER和ORDER BY

CODE:

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 

错误:

Msg 102, Level 15, State 1, Line 3

Incorrect syntax near 'order'.

+1

哪个版本的SQL Server?我相信你所展示的语法只适用于2012年(可能还有更新的版本,目前还不存在) – 2012-04-05 13:01:07

回答

2

有了这样SUM聚合函数,you don't use ORDER BY in the OVER clause - 你只需要使用PARTITION功能。该ORDER用于排名功能:

​​

只需修改以消除你都聚集在ORDER,你应该罚款。

+3

你*可以*使用带有sum()或avg()的ORDER BY。然后它会创建一个“运行”总和(或平均值),直到“当前行”。到目前为止,Unlesse Oracle和PostgreSQL SQL Server尚未支持。只支持全新的SQL Server 2012这是支持 – 2012-04-05 13:15:00

+1

@a_horse_with_no_name - 感谢您的信息,我没有意识到它在2012年发生了变化 – JNK 2012-04-05 13:15:55

+0

ID账户ID数量 1 1 10总和= 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,帐户ID,数量, SUM(数量)OVER(PARTITION BY的AccountID)AS TopBorcT , FROM tCariH – serkan 2012-04-06 06:39:08

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