यह एक रनिंग टोटल देता है (यह कार्यक्षमता SQL सर्वर में संस्करण 2012 तक लागू नहीं की गई थी ।)
ORDER BY
विंडो को UNBOUNDED PRECEDING
. के साथ समेकित करने के लिए परिभाषित करता है और CURRENT ROW
निर्दिष्ट नहीं होने पर डिफ़ॉल्ट के रूप में। SQL सर्वर डिफ़ॉल्ट रूप से कम अच्छा प्रदर्शन कर रहा है
RANGE
ROWS
. के बजाय विकल्प ।
RANGE
. के लिए विंडो में संबंधों के मामले में उनके पास अलग-अलग शब्दार्थ हैं संस्करण में न केवल वर्तमान पंक्ति (और पिछली पंक्तियाँ) शामिल हैं, बल्कि a
के समान मान वाली कोई अतिरिक्त बंधी पंक्तियाँ भी शामिल हैं वर्तमान पंक्ति के रूप में। इसे नीचे दिए गए परिणामों में से प्रत्येक द्वारा गिने जाने वाली पंक्तियों की संख्या में देखा जा सकता है।
SELECT a,
b,
COUNT(*) OVER (ORDER BY a
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS [Rows],
COUNT(*) OVER (ORDER BY a
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS [Range],
COUNT(*) OVER() AS [Over()]
FROM t;
रिटर्न
a b Rows Range Over()
-------- -------- ----------- ----------- -----------
NULL NULL 1 4 12
NULL NULL 2 4 12
NULL NULL 3 4 12
NULL NULL 4 4 12
a b 5 7 12
a b 6 7 12
a b 7 7 12
c d 8 11 12
c d 9 11 12
c d 10 11 12
c d 11 11 12
e NULL 12 12 12
जिस परिणाम की आप अपेक्षा कर रहे थे उसे प्राप्त करने के लिए दोनों . को छोड़ दें PARTITION BY
और ORDER BY
और एक खाली OVER()
. का उपयोग करें खंड (ऊपर भी दिखाया गया है)।