Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle SQL - डायनेमिक केस स्टेटमेंट

आपको गतिशील कॉलम परिभाषा के साथ एक PIVOT फ़ंक्शन की आवश्यकता है। सबसे आसान तरीका है पिवट एक्सएमएल:

create table tst_data (id int primary key, source varchar2(255));

insert into tst_data values (1, 'INTERNET');
insert into tst_data values (2, 'DEMO');
insert into tst_data values (3, 'INTERNET');
insert into tst_data values (4, 'SALES');
insert into tst_data values (5, 'INTERNET');
insert into tst_data values (6, 'DEMO');
insert into tst_data values (7, 'INTERNET');
insert into tst_data values (8, 'COM');

commit;

select * from (
  select source from tst_data
) 
pivot xml 
(
  count(1)
  for source in (select distinct t.source from tst_data t)
)  

आपको XML डेटा संसाधित करने की आवश्यकता के बाद:

<PivotSet>
    <item>
        <column name = "SOURCE">COM</column>
        <column name = "COUNT(1)">1</column>
    </item>
    <item>
        <column name = "SOURCE">DEMO</column>
        <column name = "COUNT(1)">2</column>
    </item>
    <item>
        <column name = "SOURCE">INTERNET</column>
        <column name = "COUNT(1)">4</column>
    </item>
    <item>
        <column name = "SOURCE">SALES</column>
        <column name = "COUNT(1)">1</column>
    </item>
</PivotSet>

PIVOT XML डायनामिक कॉलम परिभाषा का समर्थन करता है (for source in (select distinct t.source from tst_data t) ) हालांकि यह एक्सएमएल डेटा देता है। Extractvalue और xmltable फ़ंक्शन सर्वर साइड पर XML से विशेष कॉलम को क्वेरी करने की अनुमति देते हैं लेकिन आपको पहले से फ़ील्ड नाम निर्दिष्ट करने होंगे। इसलिए मैं इसे क्लाइंट साइड पर पार्स करना चाहता हूं।

यदि आप डीबी-लेयर पर सब कुछ करना चाहते हैं तो एक और तरीका है। PIVOT (एक्सएमएल नहीं) कॉलम नामों की आवश्यकता है for source in ('INTERNET', 'DEMO', 'COM', ...) . ऐसी क्वेरी उत्पन्न करना और कर्सर . लौटाना संभव है ग्राहक पक्ष के लिए:

CREATE OR REPLACE FUNCTION FUNCTION1 RETURN SYS_REFCURSOR AS 
 cur sys_refcursor;
BEGIN
  open cur for 'select * from dual'; // generate PIVOT query here
  RETURN cur;
END FUNCTION1;

मुझे कर्सर से (सर्वर साइड पर) एक साधारण बिना टाइप की क्वेरी बनाने की कोई विधि नहीं पता है, इसलिए यदि आप एक सादे SQL क्वेरी का उपयोग करना चाहते हैं तो इसे दो चरणों में करें:

  1. पीएल/एसक्यूएल फ़ंक्शन में नामित कॉलम के साथ एक पिवोट क्वेरी जेनरेट करें;
  2. अपने क्लाइंट से क्वेरी चलाएँ।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL संबंधित पंक्तियों को एक पंक्ति में बदलने के लिए

  2. DUAL तालिका की आंतरिक कार्यक्षमता?

  3. जावा में कनेक्शन स्ट्रिंग पैरामीटर रखने के लिए कॉन्फ़िग फ़ाइल

  4. क्या Oracle के सरल कार्यों पर प्रशासन के लिए कठिन होने के दावे सही हैं? क्या इसके लिए गुणवत्तापूर्ण व्यवस्थापक ऐप्स नहीं हैं?

  5. Oracle फ़ंक्शन में पासवर्ड एन्क्रिप्ट/डिक्रिप्ट करें