2012-04-05 1 views
5

Я не могу понять ошибку этого кода.Как использовать OVER и ORDER BY

КОД:

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 году (и, возможно, более поздних версиях, которые еще не существуют) –

ответ

2

С агрегатной функции, как SUM, you don't use ORDER BY in the OVER clause - вам нужно только использовать функцию PARTITION. ORDER используется для ранжирования функций:

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.

Просто изменить, чтобы удалить ORDER в обоих ваших агрегатов и вы должны быть хорошо.

+3

Вы * можете * использовать ORDER BY с sum() или avg(). Затем он создаст «текущую» сумму (или среднюю) до «текущей строки». Unlesse Oracle и PostgreSQL SQL Server до сих пор не поддерживали это. Только с новым SQL Server 2012 это поддерживается –

+1

@a_horse_with_no_name - Спасибо за информацию, я не осознал, что это изменилось в 2012 году – JNK

+0

ID AccountID Количество 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, идентификатор AccountID, количество, СУММА (Количество) НАД (PARTITION BY AccountID) КАК TopBorcT , FROM 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