मैं SQL सर्वर के जहाँ क्लॉज़ में विंडो वाले फ़ंक्शन का उपयोग क्यों नहीं कर सकता?
एक उत्तर, हालांकि विशेष रूप से जानकारीपूर्ण नहीं है, क्योंकि युक्ति कहती है कि आप नहीं कर सकते।
इत्ज़िक बेन गण द्वारा लेख देखें - तार्किक क्वेरी प्रसंस्करण:यह क्या है और इसका आपके लिए क्या अर्थ है और विशेष रूप से यहां की छवि। विंडो फ़ंक्शन का मूल्यांकन SELECT
. के समय किया जाता है सभी WHERE
. के बाद बचे हुए परिणाम सेट पर /JOIN
/GROUP BY
/HAVING
खंड निपटाए गए हैं (चरण 5.1) ।
वास्तव में मैं जहां क्लॉज में विंडोिंग फ़ंक्शंस का उपयोग करने में सक्षम नहीं होने के पीछे तर्क की तलाश कर रहा हूं।
कारण है कि उन्हें WHERE
. में अनुमति नहीं है खंड यह है कि यह अस्पष्टता पैदा करेगा। विंडो फ़ंक्शंस का उपयोग करके उच्च-प्रदर्शन टी-एसक्यूएल से इत्ज़िक बेन गण का उदाहरण चोरी करना (p.25)
मान लीजिए आपकी टेबल
. थीCREATE TABLE T1
(
col1 CHAR(1) PRIMARY KEY
)
INSERT INTO T1 VALUES('A'),('B'),('C'),('D'),('E'),('F')
और आपकी क्वेरी
SELECT col1
FROM T1
WHERE ROW_NUMBER() OVER (ORDER BY col1) <= 3
AND col1 > 'B'
सही परिणाम क्या होगा? क्या आप उम्मीद करेंगे कि col1 > 'B'
विधेय पंक्ति क्रमांकन से पहले या बाद में चला?