समस्या:
आप परिणाम तालिका में प्रत्येक पंक्ति को एक अलग संख्या देना चाहेंगे।
उदाहरण:
हमारे डेटाबेस में furniture
निम्नलिखित कॉलम में डेटा के साथ:code
(प्राथमिक कुंजी) और name
।
कोड | <थ>नाम|
---|---|
101 | बिस्तर |
202 | सोफा |
333 | कुर्सी |
123 | किताबों की अलमारी |
235 | टेबल |
766 | डेस्क |
furniture
टेबल फर्नीचर के उन टुकड़ों का नाम संग्रहीत करता है जिन्हें हम क्रमांकित करना चाहते हैं।
समाधान:
SELECT ROW_NUMBER() OVER() AS num_row, code, name FROM furniture;
क्वेरी फ़र्नीचर के प्रत्येक टुकड़े की पंक्ति संख्या उसके नाम और कोड के साथ लौटाती है:
num_row | <थ>नामकोड | |
---|---|---|
1 | बिस्तर | 101 |
2 | सोफा | 202 |
3 | कुर्सी | 333 |
4 | किताबों की अलमारी | 123 |
5 | टेबल | 235 |
6 | डेस्क | 766 |
ध्यान दें कि फर्नीचर के टुकड़ों के नाम क्रमबद्ध नहीं हैं।
चर्चा:
यदि आप परिणाम सेट में प्रत्येक पंक्ति को क्रमांकित करना चाहते हैं, तो SQL ROW_NUMBER()
प्रदान करता है समारोह। इस फ़ंक्शन का उपयोग SELECT
. में किया जाता है अन्य स्तंभों के साथ खंड। ROW_NUMBER()
. के बाद खंड, हम OVER()
. कहते हैं समारोह। यदि आप OVER
. के लिए कोई तर्क देते हैं , पंक्तियों की संख्या किसी भी स्तंभ के अनुसार क्रमबद्ध नहीं की जाएगी। इस प्रकार, प्रदर्शित पंक्तियों का क्रम गैर-नियतात्मक होगा; ज्यादातर मामलों में, यह वह क्रम है जिसमें रिकॉर्ड तालिका में डाले गए थे। पंक्तियों की संख्या 1 से शुरू होती है। हमारे उदाहरण में, प्रत्येक रिकॉर्ड में 1 से 6 तक की संख्या होती है।
हम कॉलम का उपयोग करके पंक्ति संख्याएँ भी निर्दिष्ट कर सकते हैं। नीचे दिए गए उदाहरण में, हम नाम के आधार पर रिकॉर्ड की संख्या को क्रमबद्ध करते हैं। हम उस तर्क को OVER
. में पास करके ऐसा करते हैं साथ में ORDER BY
(यह नाम कॉलम के अनुसार रिकॉर्ड को सॉर्ट करता है):
SELECT ROW_NUMBER() OVER(ORDER BY name) AS num_row, name, code FROM furniture;
जब आप परिणाम सेट को देखते हैं, तो आप क्रमबद्ध पंक्तियों को उनकी संख्याओं के साथ देखते हैं:
पंक्ति | <थ>नामकोड | |
---|---|---|
1 | बिस्तर | 101 |
2 | किताबों की अलमारी | 123 |
3 | कुर्सी | 333 |
4 | डेस्क | 766 |
5 | सोफा | 202 |
6 | टेबल | 235 |
ROW_NUMBER()
. द्वारा प्रदान की गई नंबरिंग परिणाम तालिका में पंक्तियों के क्रम से स्वतंत्र है। नीचे दिए गए उदाहरण में, हम सॉर्ट किए गए कॉलम नाम (OVER(ORDER BY name)
), लेकिन हम दूसरे कॉलम के अनुसार सेट किए गए परिणाम में रिकॉर्ड प्रदर्शित करते हैं (हमारे उदाहरण में, ORDER BY code
)।
SELECT ROW_NUMBER() OVER(ORDER BY name) AS num_row, name, code FROM furniture ORDER BY code;
क्वेरी ने प्रत्येक पंक्ति की संख्या लौटा दी, लेकिन ये संख्याएँ आरोही क्रम में नहीं हैं, क्योंकि रिकॉर्ड कॉलम कोड के अनुसार क्रमबद्ध हैं:
पंक्ति | <थ>नामकोड | |
---|---|---|
1 | बिस्तर | 101 |
2 | किताबों की अलमारी | 123 |
5 | सोफा | 202 |
6 | टेबल | 235 |
3 | कुर्सी | 333 |
4 | डेस्क | 766 |
सॉर्ट की गई पंक्तियों का डिफ़ॉल्ट क्रम आरोही है, लेकिन आप DESC
का उपयोग करके अवरोही क्रम में भी सॉर्ट कर सकते हैं कॉलम के नाम के बाद कीवर्ड जिसके द्वारा आप सॉर्ट करना चाहते हैं:
SELECT ROW_NUMBER() OVER(ORDER BY name ASC) AS num_row, name, code FROM furniture ORDER BY code DESC;
उपरोक्त क्वेरी ने परिणाम सेट लौटा दिया:
पंक्ति | <थ>नामकोड | |
---|---|---|
4 | डेस्क | 766 |
3 | कुर्सी | 333 |
6 | टेबल | 235 |
5 | सोफा | 202 |
2 | किताबों की अलमारी | 123 |
1 | बिस्तर | 101 |