उत्तर प्राप्त करने के लिए आप कॉमन टेबल एक्सप्रेशन (CTE) का उपयोग कर सकते हैं।
मान लें कि तालिका में आपके पास निम्न वेतन हैं वेतन:
EmployeeID Salary
--------------------
10101 50,000
90140 35,000
90151 72,000
18010 39,000
92389 80,000
हम उपयोग करेंगे:
DECLARE @N int
SET @N = 3 -- Change the value here to pick a different salary rank
SELECT Salary
FROM (
SELECT row_number() OVER (ORDER BY Salary DESC) as SalaryRank, Salary
FROM Salaries
) as SalaryCTE
WHERE SalaryRank = @N
वेतन द्वारा अवरोही क्रम में क्रमबद्ध करने के बाद यह प्रत्येक पंक्ति के लिए एक पंक्ति संख्या बनाएगा, फिर तीसरी पंक्ति को पुनः प्राप्त करेगा (जिसमें तीसरा उच्चतम रिकॉर्ड होता है)।
- एसक्यूएल फिडल
आप में से जो सीटीई नहीं चाहते हैं (या एसक्यूएल 2000 में फंस गए हैं):
[नोट :यह उपरोक्त उदाहरण से काफी खराब प्रदर्शन करता है; निष्पादन योजनाओं के साथ-साथ उन्हें चलाने से सीटीई के लिए 36% और सबक्वेरी के लिए 64% की क्वेरी लागत दिखाई देती है]:
SELECT TOP 1 Salary
FROM
(
SELECT TOP N Salary
FROM Salaries
ORDER BY Salary DESC
) SalarySubquery
ORDER BY Salary ASC
जहां एन आपके द्वारा परिभाषित किया गया है।
SalarySubquery
वह उपनाम है जो मैंने सबक्वेरी को दिया है, या क्वेरी जो कोष्ठक में है।
सबक्वेरी क्या करती है यह शीर्ष एन वेतन का चयन करती है (हम कहेंगे 3 इस मामले में), और उन्हें सबसे बड़े वेतन से आदेश देता है।
अगर हम तीसरा सबसे ज्यादा वेतन देखना चाहते हैं, तो सबक्वायरी वापस आ जाएगी:
Salary
-----------
80,000
72,000
50,000
बाहरी क्वेरी तब सबक्वायरी से पहले वेतन का चयन करती है, सिवाय इसके कि हम इसे इस बार आरोही क्रम में क्रमबद्ध कर रहे हैं, जो कि सबसे छोटे से सबसे बड़े क्रम में होता है, इसलिए 50,000 आरोही क्रम में पहला रिकॉर्ड होगा।
जैसा कि आप देख सकते हैं, उदाहरण में 50,000 वास्तव में तीसरा सबसे अधिक वेतन है।