2012-07-04 14 views
6

मेरे पास एक SQL-query है जहां मैं या से अधिक दिनांक दिनांक से अधिक दिनांक की तुलना करने के लिए ओरेकल CASE का उपयोग करता हूं। लेकिन मैं CASE-GROUP BY -स्टेटमेंट में स्टेटमेंट का उपयोग कैसे करूं? मैं प्रत्येक मामले में रिकॉर्ड गिनना चाहता हूं।ओरेकल में केस स्टेटमेंट के आधार पर मैं समूह का उपयोग कैसे करूं?

उदा।

select 
    (case 
     when exp_date > sysdate then 1 
     when exp_date <= sysdate then 2 
     else 3 
    end) expired, count(*) 
from mytable 
group by expired 

लेकिन मुझे यह कोशिश करते समय त्रुटि मिली: ORA-00904। कोई सुझाव? ,

SELECT expired, 
     count(*) 
    FROM (SELECT (CASE 
        WHEN exp_date > SYSDATE THEN 1 
        WHEN exp_date <= SYSDATE THEN 2 
        ELSE 3 
       END) AS expired 
      FROM mytable) 
GROUP BY expired; 

आशा है कि यह मदद करता है ...

+1

http://stackoverflow.com/questions/268429/group-by-alias-oracle – manurajhada

उत्तर

9
select 
(case 
    when exp_date > sysdate then 1 
    when exp_date <= sysdate then 2 
    else 3 
end) expired, count(*) 
from mytable 
group by (case 
    when exp_date > sysdate then 1 
    when exp_date <= sysdate then 2 
    else 3 
end) 
+0

प्रदर्शन के संदर्भ में इन-लाइन दृश्य के साथ क्या अंतर है? – Donatello

+1

मुझे यकीन नहीं है। इस बात पर निर्भर करेगा कि ऑरैकल 'केस' का दो बार मूल्यांकन करता है या नहीं। आप 'एक्सप्लाइन प्लान' का उपयोग करके जांच सकते हैं। किसी भी मामले में, हिंडसाइट के साथ, शायद मैं @ ओली उत्तर के साथ जाऊंगा, क्योंकि मुझे लगता है कि एसक्यूएल डुप्लिकेट तर्क के बिना बेहतर दिखता है – paul

12

एक इनलाइन दृश्य का उपयोग करें खंड में समूह में इसका उल्लेख किए बिना।

WORK_ORDER_NUMBER, योग का चयन करें (मामला है जब STOCK_CODE की तरह 'xxxx' तब STOCK_QUANTITY वरना 0 अंत) के रूप में कुल से WORK_ORDER_NUMBER करके तालिका ग्रुप;

कृपया, जेके।

0

एक अतिरिक्त इनपुट के रूप में हालांकि यह इस सूत्र से संबंधित नहीं है, तो आप भी अपने मामले बयान समेकित कर सकते हैं:

संबंधित मुद्दे