2012-04-05 36 views
5

Tôi không thể hiểu được lỗi của mã này.Làm cách nào để sử dụng OVER và ORDER BY

Mã sản phẩm:

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 

LỖI:

Msg 102, Level 15, State 1, Line 3

Incorrect syntax near 'order'.

+1

Phiên bản nào SQL Server? Tôi tin rằng cú pháp bạn chỉ hiển thị hoạt động vào năm 2012 (và có thể là các phiên bản sau này, chưa tồn tại) –

Trả lời

2

Với chức năng tổng hợp như SUM, you don't use ORDER BY in the OVER clause - bạn chỉ cần sử dụng chức năng PARTITION. Các ORDER được sử dụng cho các chức năng xếp hạng:

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.

Chỉ việc điều chỉnh để loại bỏ các ORDER trong cả hai uẩn của bạn và bạn cần sử dụng tốt.

+3

Bạn * có thể * sử dụng ORDER BY với tổng() hoặc avg(). Sau đó nó sẽ tạo ra một "chạy" tổng (hoặc trung bình) lên đến "hàng hiện tại". Unlesse Oracle và PostgreSQL SQL Server đã không hỗ trợ cho đến bây giờ. Chỉ với SQL Server 2012 mới được hỗ trợ –

+1

@a_horse_with_no_name - Cảm ơn bạn đã thông tin, tôi đã không nhận ra nó đã thay đổi vào năm 2012 – JNK

+0

Số ID tài khoản ID 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 ID CHỌN, ID tài khoản, Số lượng, SUM (Số lượng) OVER (PARTITION BY AccountID) AS TopBorcT , TỪ 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 
Các vấn đề liên quan