2012-04-05 9 views
5

Nie mogę zrozumieć błędu tego kodu.Jak mogę używać POWYŻEJ i ZAMÓWIENIA PRZEZ

KOD:

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 

BŁĄD:

Msg 102, Level 15, State 1, Line 3

Incorrect syntax near 'order'.

+1

Której wersji serwera SQL? Uważam, że wyświetlana składnia działa tylko w 2012 roku (i prawdopodobnie w późniejszych wersjach, które jeszcze nie istnieją). –

Odpowiedz

2

o łącznej funkcji jak SUM, you don't use ORDER BY in the OVER clause - trzeba tylko użyć funkcji PARTITION. ORDER służy do funkcji 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.

Wystarczy zmodyfikować, aby usunąć ORDER w obu swoich agregatów i powinno być w porządku.

+3

Możesz * użyć * ORDER BY z sumą() lub avg(). Następnie utworzy "działającą" sumę (lub średnią) do "bieżącego rzędu". Unlesse Oracle i PostgreSQL SQL Server nie wspierają tego do tej pory. Tylko z nowym serwerem SQL 2012 jest on obsługiwany –

+1

@a_horse_with_no_name - Dzięki za informacje, nie zdawałem sobie sprawy, że to się zmieniło w 2012 roku – JNK

+0

ID AccountID Ilość 1 1 10 Suma = 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, identyfikator konta, ilości suma (ilość) w ciągu (przegrodzenie accountid) jako TopBorcT , FROM tCharH – 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 
Powiązane problemy