2012-03-12 5 views
9

मेरे पास तीन कॉलम वाली एक तालिका है; पहले कॉलम में आईडी हैं और अन्य दो कॉलम में तिथियां हैं (जहां सबसे अधिक शून्य है, लेकिन मुझे नहीं लगता कि इससे कुछ भी प्रभावित होना चाहिए)। मैं किस तारीख के आधार पर आईडी के ऑर्डर करने के बारे में कैसे जाउंगा? मैंने कोशिश की हैएसक्यूएल ऑर्डर दो अलग-अलग (संभावित रूप से शून्य) कॉलम

ORDER BY CASE 
WHEN date1 > date2 THEN date1 
ELSE date2 
END 

लेकिन यह काम नहीं किया। क्या कोई मेरी मदद कर सकता है? साथ ही, मैंने जिन अन्य समस्याओं को पोस्ट किया है, उनमें से सभी को यह है कि क्वेरी पहले कॉलम, के आधार पर परिणाम टाइप करती है और फिर यदि पहला कॉलम शून्य, दूसरा कॉलम है। क्या मुझे पहले हर एक शून्य मूल्य को परिभाषित करना होगा? मैं इस तालिका को एक पूर्ण बाहरी शामिल करके बना रहा हूं, इसलिए यह पूछने के लिए एक पूरी तरह से अलग सवाल होगा, इसलिए उम्मीद है कि यह शून्य मूल्यों के साथ किया जा सकता है।

+1

आपकी 'केस' अभिव्यक्ति मेरे लिए ठीक लगती है, सिवाय इसके कि यह उस स्थिति का समर्थन नहीं करता है जहां 'date2' शून्य है; इसका समर्थन करने के लिए, आप लिखना चाहते हैं (कहें) 'केस द्वारा ऑर्डर करें जब दिनांक 1> दिनांक 2 या दिनांक 2 पूर्ण है तारीख 1 ईएलएसई दिनांक 2 ईएनडी। लेकिन आप कहते हैं कि यह "काम नहीं किया"। क्या आप अधिक विशिष्ट हो सकते हैं? उदाहरण के लिए, क्या आप वास्तविक डेटा पोस्ट कर सकते हैं जो सही तरीके से आदेश देने में विफल रहता है? – ruakh

+0

गेबे, कौन सा डेटाबेस क्वेरी चलाएगा? –

+0

इसके बारे में क्षमा करें, मैंने सोचा कि वे सभी एक ही काम करते हैं। लेकिन मैं ओरेकल का उपयोग कर रहा हूँ। मुझे नहीं पता कि यह आपके लिए पर्याप्त विशिष्ट है या नहीं। : एस –

उत्तर

15

मेरा मानना ​​है कि आपकी समस्या तुलना में नाकाम रहने जब या तो स्तंभ शून्य है से संबंधित है। तो, आपको शायद इसकी आवश्यकता है:

ORDER BY CASE 
      WHEN date1 IS NULL THEN date2 
      WHEN date2 IS NULL THEN date1 
      WHEN date1 > date2 THEN date1 
      ELSE     date2 
      END 
+0

यह किया, धन्यवाद! : डी –

-1

प्रयास करें ...

SELECT MAX(date1,date2) date FROM table ORDER BY date; 
+0

हाँ, लेकिन आप वास्तव में मानक एसक्यूएल में किसी भी तरह से तालिका 1 में अपने आप में शामिल होने के बिना वास्तव में ऐसा नहीं कर सकते हैं! = शून्य, फिर डेट 2 पर फिर से शामिल हों! = शून्य, लेकिन वही ALIAS दें जो व्यवहार को अपरिभाषित करते हैं। – DanRedux

+0

(मैंने अपनी पिछली टिप्पणियों को हटा दिया है, ताकि उन्हें अधिक स्पष्ट किया जा सके।) मुझे नहीं लगता कि कोई भी डीबीएमएस उस 'MAX' के उपयोग का समर्थन करता है; शायद आप 'ग्रेटेस्ट' के बारे में सोच रहे हैं? लेकिन वैसे भी, इस दृष्टिकोण के लिए वास्तव में कोई ज़रूरत नहीं है; ये अभिव्यक्ति 'ORDER BY' खंड में ठीक हो सकती हैं। – ruakh

+0

वे कर सकते हैं, लेकिन इसे अपने स्वयं के कॉलम के रूप में अलियासिंग करने की तारीख को भी पुनर्प्राप्त करने की अनुमति देता है। अतिरिक्त, मुफ्त कार्यक्षमता। – DanRedux