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

एकाधिक केस SQL ​​क्वेरी एकल पंक्ति को एकाधिक कॉलम के रूप में पुनर्प्राप्त करती है

Oracle 11.1 और इसके बाद के संस्करण में, आप UNPIVOT . का उपयोग कर सकते हैं ऑपरेटर। यदि आपके पास बड़ी मात्रा में डेटा है, तो यह निष्पादन समय में एक महत्वपूर्ण सुधार प्रदान करेगा, क्योंकि इसमें किसी भी प्रकार के UNION ALL के साथ तालिका को तीन बार पढ़ने के बजाय केवल एक बार पढ़ने की आवश्यकता होती है। दृष्टिकोण।

मैंने date . से कॉलम का नाम (आउटपुट में) बदल दिया है से dt . तक चूंकि DATE Oracle में एक आरक्षित शब्द है। type बहुत बेहतर नहीं है (यह एक कीवर्ड है लेकिन यह आरक्षित नहीं है); इससे बचना भी सबसे अच्छा है। जब मैंने परीक्षण डेटा बनाया था, तब भी मैंने आपकी तिथियों को स्ट्रिंग के रूप में माना था, लेकिन यह तिथियों के साथ ही काम करता है।

with क्लॉज समाधान का हिस्सा नहीं है (इसे क्वेरी के साथ आँख बंद करके कॉपी और पेस्ट न करें); मैंने इसे केवल परीक्षण उद्देश्यों के लिए जोड़ा है।

with
     test_data ( ID, VT_Type1, Vt_type2, VT_Type3, Status_1, Status_2, Status_3, 
                                                         Date_1, Date_2, Date_3 ) as (
       select 1, -1, -1,  0, 'X', 'Y', 'Z', '04/12', '05/12', '06/12' from dual union all
       select 2, -1, -1, -1, 'A', 'B', 'C', '06/12', '07/12', '07/10' from dual
     )
select  id, type, status, dt
from    test_data
unpivot ( (vt_type, status, dt) for type in ( (vt_type1, status_1, date_1) as 1,
                                              (vt_type2, status_2, date_2) as 2,
                                              (vt_type3, status_3, date_3) as 3
                                            )
        )
where   vt_type != 0
;

ID  TYPE  STATUS  DT
--  ----  ------  -----
 1     1  X       04/12
 1     2  Y       05/12
 2     1  A       06/12
 2     2  B       07/12
 2     3  C       07/10


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सही मान नहीं लौटाने के बीच के महीने

  2. Oracle में स्तंभ मानों की अदला-बदली

  3. पीएल/एसक्यूएल फ़ंक्शन या प्रक्रिया के अंदर से ओरेकल सिस्टम टेबल तक कैसे पहुंचे?

  4. Oracle स्ट्रिंग टू डेट 2013-10-15T20:12:56.24584+0100

  5. Oracle क्वेरी आउटपुट को json में बदलें (Oracle / NodeJS)