Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Memutar tabel secara dinamis Oracle

Ini dapat dilakukan secara dinamis dengan cara berikut. Pertama, ini adalah versi statis dari kueri sehingga Anda dapat melihat sql terakhir:

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

Lihat SQL Fiddle dengan Demo

Kemudian untuk melakukan ini secara dinamis, Anda dapat membuat prosedur berikut:

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;
/

Kemudian untuk menjalankannya:

variable x refcursor
exec dynamic_pivot(:x)
print x

Hasilnya sama:

|   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. Menghubungkan Perangkat Lunak IRI ke Oracle

  2. salin dari satu database ke database lain menggunakan pengembang Oracle sql - koneksi gagal

  3. TRIM() Fungsi di Oracle

  4. Menghubungkan SQL Server ke Oracle

  5. Encoding dan decoding Base64 di Oracle