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

Oracle तालिका को गतिशील रूप से पिवट करना

यह निम्नलिखित तरीके से गतिशील रूप से किया जा सकता है। सबसे पहले, यहां क्वेरी का स्थिर संस्करण दिया गया है ताकि आप अंतिम sql देख सकें:

select c_id,
  p_id,
  max(case when r_key= 'KEY1' then r_value  end) KEY1,
  max(case when r_key= 'KEY2' then r_value  end) KEY2,
  max(case when r_key= 'KEY3' then r_value  end) KEY3,
  max(case when r_key= 'KEY4' then r_value  end) KEY4,
  max(case when r_key= 'KEY5' then r_value  end) KEY5
from s_projectroles
group by c_id, p_id

डेमो के साथ SQL Fiddle देखें

फिर इसे गतिशील रूप से करने के लिए, आप निम्न प्रक्रिया बना सकते हैं:

CREATE OR REPLACE procedure dynamic_pivot(p_cursor in out sys_refcursor)
as
    sql_query varchar2(1000) := 'select c_id, P_id ';

    begin
        for x in (select distinct r_key from s_projectroles order by 1)
        loop
            sql_query := sql_query ||
              ' , max(case when r_key = '''||x.r_key||''' then r_value end) as '||x.r_key;

                dbms_output.put_line(sql_query);
        end loop;

        sql_query := sql_query || ' from s_projectroles group by c_id, p_id';

        open p_cursor for sql_query;
    end;
/

फिर इसे निष्पादित करने के लिए:

variable x refcursor
exec dynamic_pivot(:x)
print x

नतीजा वही है:

|   C_ID |   P_ID |   KEY1 |   KEY2 |   KEY3 |   KEY4 |   KEY5 |
----------------------------------------------------------------
| (null) | (null) | VALUE1 | VALUE2 | VALUE3 | (null) | (null) |
|      2 |      2 | (null) | (null) | (null) | VALUE4 | (null) |
|      2 |      3 | (null) | (null) | (null) | (null) | VALUE5 |



  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 में किसी मान में कम से कम एक संख्यात्मक अंक है

  2. oracle 12c . के लिए हाइबरनेट बोली

  3. सी # से ओरेकल संग्रहीत प्रक्रिया को कॉल करना?

  4. आप किसी प्रश्न की व्याख्या योजना की व्याख्या कैसे करते हैं?

  5. सी # - ओरेकल लंबे कच्चे प्रकार का मूल्य कैसे प्राप्त करें?