2011-05-29 14 views
6

मेरे पास एक तालिका है जिसमें कॉलम के अंदर 2 प्रकार के टेक्स्ट होते हैं। पहला प्रकार एक ईमेल पता स्ट्रिंग (पूर्व [email protected]) है और दूसरा व्यक्ति का नाम है (जॉन डो)एसक्यूलाइट क्वेरी ऑर्डर

मैं इस क्वेरी का उपयोग डेटा को सॉर्ट करने के लिए कर रहा हूं ताकि पहले पंक्तियां न हों @ चार दिखाए जा रहे हैं और फिर लोगों को करना है कि है यह:

SELECT * 
    FROM Name 
ORDER BY CASE 
      WHEN displayName LIKE '%@%' THEN 1 
      ELSE 2 
     END 

तो क्या मैं कर रहा है मामलों आरोही क्रमबद्ध करना ऐसा करने में असमर्थ हूँ ताकि मैं नाम पत्र आरोही ईमेल निम्नलिखित के अनुसार क्रमबद्ध है अक्षर आरोही द्वारा क्रमबद्ध।

उत्तर

13

उपयोग:

SELECT n.* 
    FROM NAME n 
ORDER BY CASE 
      WHEN displayName LIKE '%@%' THEN 1 
      ELSE 2 
     END, n.displayname COLLATE NOCASE 

ORDER BY खंड का समर्थन करता है एक से अधिक कॉलम, लेकिन प्राथमिकता को बाएं से दाएं पढ़ा जाता है। इसलिए displayname उनमें से "@" वाले मान शीर्ष पर हैं, और फिर प्रत्येक समूह (0 CASE स्टेटमेंट के आधार पर) में displayname मान द्वारा आदेश दिया गया है।

आपको असंवेदनशील तुलना के मामले में COLLATE operator का उपयोग करने की आवश्यकता है।

+0

ठीक है यह काम करता है लेकिन पूरी तरह से नहीं। अगर पत्र ऊपर उठता है या नहीं तो यह ध्यान में रखता है। यह मुझे उपरोक्त क्रमशः क्रमबद्ध क्रमशः अक्षर से शुरू करता है और फिर लोअरकेस से शुरू होने वाले वर्णमाला क्रमशः क्रमबद्ध होते हैं और फिर यह ईमेल के साथ समान होता है। – DArkO

+0

ठीक है मैंने इसे समझ लिया। अंत के बाद UPPER (displayName) जोड़ा गया, – DArkO

+0

@DArko: 'COLLATE' अधिक कार्यक्षमता प्रदान करता है - अपडेट देखें। –

3

असल में, यह इस तरह दिखेगा:

Select * 
FROM Name 
Order by case when displayName LIKE '%@%' then 1 else 2 end, displayName 

तुम सिर्फ एक दूसरे मद जोड़ रहे हैं सूची पर क्रमबद्ध करना। यह पहले 1 या 2 कॉलम द्वारा क्रमबद्ध करेगा और फिर यह उन परिणामों को वास्तविक नाम से सॉर्ट करेगा।

अपने मिलान प्रकार आप चाहते हैं के लिए अनुमति नहीं है, तो आप ऐसा इस तरह समायोजित करने के लिए थोड़ा द्वारा आदेश को संशोधित कर सकते हैं:

Select * 
FROM Name 
Order by case when displayName LIKE '%@%' then 1 else 2 end, UPPER(displayName) 
संबंधित मुद्दे