2011-02-10 17 views
8

द्वारा आदेश गतिशील है लेकिन क्रम क्रम स्थिर है।ओरेकल गतिशील डीईएससी और एएससी

SELECT ... 
Order By CASE WHEN InputParam = 'PRICE' THEN OFFER_PRICE END DESC, 
     CASE WHEN InputParam = 'ENDING SOON' THEN EXPIRY_DATE END DESC, 
     CASE WHEN InputParam = 'DISCOUNT' THEN DISC_PERCENTAGE END DESC, 
     CASE WHEN InputParam = 'SAVING' THEN SAVING END DESC 

अब मुझे यह सुनिश्चित करने की आवश्यकता है कि क्रम क्रम भी गतिशील है। उपर्युक्त क्वेरी में सॉर्ट ऑर्डर गतिशील बनाने का कोई तरीका है?

उत्तर

14

आप भी सॉर्ट क्रम (एएससी/DESC) गतिशील बनाना चाहते हैं, तो आपको निम्न कर सकता है:

SELECT ... 
Order By CASE WHEN InputParam = 'PRICE' THEN l_so * OFFER_PRICE END, 
     CASE WHEN InputParam = 'ENDING SOON' 
       THEN l_so * (SYSDATE - EXPIRY_DATE) END, 
     CASE WHEN InputParam = 'DISCOUNT' THEN l_so * DISC_PERCENTAGE END, 
     CASE WHEN InputParam = 'SAVING' THEN l_so * SAVING END 
एक चर l_so कि 1 या शामिल साथ

-1 निर्भर करता है जो सॉर्ट क्रम पर आप चाहते हैं ।

+0

आपका जादूगर .. –

+0

Expiry_Date डेटाटाइम कॉलम है। उपर्युक्त विधि इसके लिए काम नहीं कर रही है। –

+1

@Aseem: आपके पास या तो आपके दिनांक आदेश (एएससी के लिए एक, डीईएससी के लिए एक) के लिए दो केस हो सकते हैं या अपनी तिथि को किसी संख्या (दिनों के) में परिवर्तित कर सकते हैं और सही क्रम चुनने के लिए चर का उपयोग कर सकते हैं। –

7

यह मेरे लिए काम करता है:

order by 
    case when :dir_param = 'ASC' then 
    case :col_param 
     when 'col_1_identifier' then col_1_name 
     when 'col_2_identifier' then col_2_name 
     ... 
    end 
    end, 
    case when :dir_param = 'DSC' then 
    case :col_param 
     when 'col_1_identifier' then col_1_name 
     when 'col_2_identifier' then col_2_name 
     ... 
    end 
    end desc 

या

order by 
case when :dir_param = 'ASC' and :col_param = 'col_1_identifier' then col_1_name end, 
case when :dir_param = 'DSC' and :col_param = 'col_1_identifier' then col_1_name end desc, 
case when :dir_param = 'ASC' and :col_param = 'col_2_identifier' then col_2_name end, 
case when :dir_param = 'DSC' and :col_param = 'col_2_identifier' then col_2_name end desc 

अपनी स्थिति के लिए विशिष्ट लोगों के साथ शाब्दिक, चर और स्तंभ नाम बदलें। ओरेकल अवरुद्ध दिशा योग्यता के प्लेसमेंट के बारे में बहुत पसंद करता था।

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