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

लिस्टुनैग फ़ंक्शन?

जैसा कि @be यहाँ अब पहले ही टिप्पणी में नोट कर चुका है कि Oracle ऐसा फ़ंक्शन प्रदान नहीं करता है। तो एक त्वरित समाधान के रूप में आप इसी तरह की क्वेरी लिख सकते हैं:

with t1(user_id, degree_fi, degree_en, degree_sv) as
(
  select 3601464, '3700', '1600', '2200' from dual union all
  select 1020   , '100' , '0'   , '0'    from dual union all
  select 3600520, '100,3200,400', '1300, 800, 3000', '1400, 600, 1500'  from dual union all
  select 3600882, '0',    '100',  '200'  from dual
),
Occurence(ocr) as(
  select Level as ocr
    from (select max(greatest(regexp_count(degree_fi, '[^,]+')
                             , regexp_count(degree_en, '[^,]+')
                             , regexp_count(degree_sv, '[^,]+')
                             )
                    ) mx
            from t1    
          ) 
    connect by level <= mx
)
select *
  from (
select User_id
     , regexp_substr(degree_fi, '[^,]+', 1, o.ocr) as degree_fi
     , regexp_substr(degree_en, '[^,]+', 1, o.ocr) as degree_en
     , regexp_substr(degree_sv, '[^,]+', 1, o.ocr) as degree_sv
   from t1 t
  cross join Occurence o
)
where degree_fi is not null
  or degree_en is not null 
  or degree_sv is not null

परिणाम:

User_Id   Degree_Fi  Degree_En  Degree_Sv
------------------------------------------------------------ 
3601464   3700       1600       2200 
1020      100        0          0 
3600520   100        1300       1400 
3600882   0          100        200 
3600520   3200       800        600 
3600520   400        3000       1500 


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

  2. किसी क्वेरी परिणाम से परिणामों का यादृच्छिक नमूना चुनें

  3. क्वेरी का उपयोग करके देखें डीडीएल प्राप्त करें

  4. जाँच कर रहा है कि कोई आइटम किसी अन्य तालिका में मौजूद नहीं है

  5. प्रासंगिक tnsnames.ora फ़ाइल का स्थान निर्धारित करना