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

Query Pivot Dinamis menggunakan Sql Developer Oracle

Anda berada di jalur yang benar tetapi kasus itu gagal ketika lebih dari satu kelas ditentukan untuk setidaknya satu siswa. Sebuah ROW_NUMBER() fungsi analitik dalam menyelesaikan masalah. Jadi, buat fungsi tersimpan termasuk SYS_REFCURSOR :

CREATE OR REPLACE FUNCTION get_student_rs RETURN SYS_REFCURSOR IS
  recordset SYS_REFCURSOR;
  sqlqry    VARCHAR2(32767);
  cols      VARCHAR2(32767);
BEGIN
  SELECT LISTAGG(''''||name||''' AS "'||name||'"' ,',') WITHIN GROUP (ORDER BY 0)
    INTO cols
    FROM ( SELECT DISTINCT name FROM Students );  

  sqlqry :=
  'SELECT *
     FROM 
     (
      SELECT ROW_NUMBER() OVER (PARTITION BY name ORDER BY 0) AS rn,
             s.*             
        FROM Students s     
      )
    PIVOT (
           MAX(class) FOR name IN ('||cols||')
           )
    ORDER BY rn';

  OPEN recordset FOR sqlqry;
  RETURN recordset;
END;
/

Asumsikan ada satu record lagi yang dimasukkan;

Name     School    Class
----     ------    -------
Jim      Hs        History

lalu panggil

VAR rc REFCURSOR
EXEC :rc := get_student_rs;
PRINT rc

dari Pengembang SQL Baris Perintah untuk melihat set hasil yang akan menjadi :

RN  SCHOOL  Jim      John     Matthew  Steve
--  ------  -------  -------  -------  ------
1   Hs      Maths    English  Science  Maths
2   Hs      History 

    



  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:Kata kunci tidak ada

  2. Oracle INSTR mundur di Oracle SQL

  3. Bagaimana cara menggunakan parameter dinamis dalam klausa IN dari kueri bernama JPA?

  4. Menghasilkan Skema SQL dari XML

  5. Panggil prosedur tersimpan yang berisi kumpulan catatan menggunakan callproc dengan python