समस्या:
आप महीने की संख्या के आधार पर पंक्तियों को क्रमबद्ध करना चाहते हैं, महीने के नाम दिए गए हैं (आप चाहते हैं कि जनवरी पहले दिखाया जाए, आखिरी दिसंबर)।
उदाहरण:
birthday
तालिका में दो कॉलम होते हैं:नाम और birthday_month
. महीने नामों में दिए जाते हैं, संख्या में नहीं।
नाम | <थ>जन्मदिन_माह|
---|---|
रोनन टीशा | जनवरी |
दिसंबर | अप्रैल |
एंजी जूलिया | अप्रैल |
नरेले डिलन | अप्रैल |
पर्डी केसी | जनवरी |
डोना नेल | शून्य |
ब्लेज़ ग्रीम | अक्टूबर |
आप पंक्तियों को birthday_month
. के अनुसार क्रमित करना चाहते हैं ।
समाधान:
SELECT * FROM birthday ORDER BY (CASE birthday_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END);
परिणाम इस तरह दिखता है (पंक्तियों को birthday_month
. द्वारा आरोही क्रम में क्रमबद्ध किया जाता है ):
नाम | <थ>जन्मदिन_माह|
---|---|
पर्डी केसी | जनवरी |
एंजी जूलिया | अप्रैल |
नरेले डिलन | अप्रैल |
ब्लेज़ ग्रीम | अक्टूबर |
रोनन टीशा | जनवरी |
दिसंबर | शून्य |
डोना नेल | शून्य |
चर्चा:
पंक्तियों को महीने के अनुसार क्रमबद्ध करने के लिए, आपको महीनों की संख्या (नाम नहीं) की आवश्यकता है। आप CASE WHEN
. का उपयोग करके महीने के नामों को संख्यात्मक महीनों में बदल सकते हैं खंड। CASE
के बाद कीवर्ड, कॉलम का नाम निर्दिष्ट करें। फिर, प्रत्येक के बाद WHEN
, इस कॉलम में मान बताएं, THEN
. का उपयोग करें कीवर्ड, और वह नया मान निर्दिष्ट करें जिसे आप पुराने मान के बजाय निर्दिष्ट करना चाहते हैं। यहां, कॉलम birthday_month
है , इस कॉलम में वर्तमान मान 'January
. हैं ', 'February
',…,'December
', और नए मान संख्यात्मक महीने हैं 1
, 2,
..., 12
. सभी मानों को कनवर्ट करने के बाद, END
. का उपयोग करना याद रखें CASE WHEN
बंद करने के लिए कीवर्ड खंड। एक नज़र डालें:
CASE birthday_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END
इस तरह आप एक महीने के नाम को एक महीने की संख्या में बदल देते हैं। आप इसका उपयोग पंक्तियों को महीने के अनुसार बढ़ते क्रम में क्रमबद्ध करने के लिए कर सकते हैं - बस इसे ORDER BY
में उपयोग करें खंड।
ध्यान दें कि SQLite में, NULL
आरोही क्रम में छँटाई करते समय s पहले प्रदर्शित होते हैं और अवरोही क्रम में छँटाई करते समय अंतिम होते हैं। साथ ही, समान birthday_month
. वाली पंक्तियां यादृच्छिक क्रम में प्रदर्शित होते हैं (आप देख सकते हैं Angie Julia
दूसरा और Narelle Dillan
तीसरा, या Narelle Dillan
दूसरा और Angie Julia
तीसरा)। क्रम को अवरोही में बदलने के लिए, DESC
. का उपयोग करें ORDER BY
. में कॉलम के बाद कीवर्ड खंड। यहां बताया गया है कि क्वेरी कैसी दिखनी चाहिए:
SELECT * FROM birthday ORDER BY (CASE birthday_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END) DESC;