2012-04-05 21 views
5

द्वारा ओवर और ऑर्डर का उपयोग कैसे कर सकता हूं मैं इस कोड की बग को समझ नहीं सकता।मैं

कोड:

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

कौन सा संस्करण एसक्यूएल सर्वर का? मेरा मानना ​​है कि आपके द्वारा दिखाया गया वाक्यविन्यास केवल 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

आप * (*) या औसत() के साथ ऑर्डर कर सकते हैं। इसके बाद यह "वर्तमान पंक्ति" तक "चल रहा" योग (या औसत) बना देगा। Unlesse Oracle और PostgreSQL SQL सर्वर ने अभी तक इसका समर्थन नहीं किया है। केवल ब्रांड के नए SQL सर्वर 2012 के साथ यह समर्थित है –

+1

@a_horse_with_no_name - जानकारी के लिए धन्यवाद, मुझे यह नहीं पता था कि यह 2012 में बदल गया है – JNK

+0

आईडी खाता आईडी मात्रा 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 चयन आईडी, ACCOUNTID, मात्रा, योग (मात्रा) से अधिक (विभाजन ACCOUNTID द्वारा) के रूप में TopBorcT , टीसीएआरएच से – 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