मैं पहले विशिष्ट मान वाली पंक्तियाँ कैसे वापस करूँ?


124

मैं चाहता हूं कि मेरी क्वेरी तालिका की पंक्तियों को वापस लौटाए जहां एक कॉलम में पहले एक विशिष्ट मूल्य होता है, और फिर बाकी की पंक्तियों को वर्णानुक्रम में लौटाता है।

अगर मेरे पास इस उदाहरण की तरह कुछ तालिका है:

 - Table: Users
 - id - name -  city
 - 1    George  Seattle
 - 2    Sam     Miami
 - 3    John    New York
 - 4    Amy     New York
 - 5    Eric    Chicago
 - 6    Nick    New York

और उस तालिका का उपयोग करके मैं अपनी क्वेरी को उन पंक्तियों को वापस करना चाहता हूं जिनमें पहले न्यूयॉर्क शामिल है, और फिर बाकी पंक्तियों को शहर द्वारा वर्णानुक्रम में लिखा गया है। क्या केवल एक क्वेरी का उपयोग करना संभव है?


यदि आप कर सकते हैं, तो दूसरे के लिए स्वीकार किए गए उत्तर को बदलने पर विचार करें, क्योंकि पहले एक केवल MySQL के लिए काम करता है और MSSQL के लिए नहीं।
मगिस्क

किया हुआ। मेरा मूल प्रश्न MySQL के बारे में था, लेकिन टैग वैसे भी प्रतिबिंबित नहीं करते थे।
फिएक्सो

धन्यवाद। मैं आज सुबह इस समस्या के लिए कुछ समान करने के प्रयास में आया था। :)
मैगिश

जवाबों:


195

SQL सर्वर, Oracle, DB2 और कई अन्य डेटाबेस सिस्टमों पर, यह वह है जो आप उपयोग कर सकते हैं:

ORDER BY CASE WHEN city = 'New York' THEN 1 ELSE 2 END, city

1
धन्यवाद! MsSQL में मेरी मदद की
Rexxo

यह वास्तव में किसी भी SQL डेटाबेस में काम करता है (और मेरी राय में स्वीकृत उत्तर की तुलना में बहुत अधिक क्लीनर समाधान है)
a_horse_with_no_name

2
ओरेकल में मेरे लिए काम करता है।
मंकीविथ डार्ट

1
और जो मुझे 'न्यूयॉर्क' (या एक और मान) रखने की आवश्यकता थी, उसके लिए अंतिम रूप से 1 और 2 स्वैप करें ... ORDER BY CASE WHEN city = 'New York' THEN 2 ELSE 1 END, city
deebs

4
ELSE 2अनुभाग का मतलब है कि न्यू यॉर्क में मान 1 हो जाता है, जबकि, अन्य सभी मान जहाँ तक सॉर्ट क्रम का संबंध है मूल्य 2. मिलता है ... कम से कम।
रोब फार्ले

106

यदि आपकी SQL बोली संख्यात्मक मान के रूप में बूलियन अभिव्यक्तियों का इलाज करने के लिए पर्याप्त बुद्धिमान है, तो आप उपयोग कर सकते हैं:

SELECT *
FROM `Users`
ORDER BY (`city` = 'New York') DESC, `city`

1
@MehrdadAfshari: नहीं, MSSQL ORDER BYक्लॉज में समतुल्यता परीक्षणों को संसाधित करने के लिए बहुत बेवकूफ है ।
अराजकता

@a_horse_with_no_name: क्या आपने MSSQL के खिलाफ उपरोक्त क्वेरी चलाने की कोशिश की है?
अराजकता

11
@chaos: उपरोक्त कथन वास्तव में SQL सर्वर के साथ नहीं चलता है, लेकिन ऐसा इसलिए है क्योंकि वाक्य रचना गैर-मानक है और केवल MySQL के लिए काम करती है। CASEस्टेटमेंट का उपयोग करते समय (जो कि मानक SQL है) SQL सर्वर ORDER BYक्लॉज में एक अभिव्यक्ति का अच्छी तरह से उपयोग कर सकता है । " समतुल्यता परीक्षणों को संसाधित करने के लिए बहुत बेवकूफ " बस गलत है। अगर यह सब पढ़ना चाहिए: " मूल्य के लिए बूलियन के MySQL के निहित कास्टिंग का समर्थन नहीं करता है (एक)।true1 "
a_horse_with_no_name 15

@ Esraa_92: तब आपके पास एक SQL बोली नहीं होती है जो इसे संभाल सके और आपको Rob Farley का जवाब चाहिए।
अराजकता

5
पोस्टग्रेज के लिए, इसने मेरे लिए काम किया:ORDER BY id = 123 DESC, name ASC
user1032752

4

मेरा उत्तर पुराना हो सकता है और आवश्यक नहीं है, लेकिन किसी को अलग दृष्टिकोण की आवश्यकता हो सकती है, इसलिए इसे यहां पोस्ट करना है।

मुझे इसकी आवश्यकता थी, इसने मेरे लिए काम किया।

Select * from Users
ORDER BY
(CASE WHEN city = 'New York' THEN 0 ELSE 1 END), city
GO

पुनश्च

यह SQL के लिए है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.