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

Pivot dinamis di Oracle sql

Anda tidak dapat menempatkan pernyataan dinamis dalam pernyataan IN PIVOT tanpa menggunakan XML PIVOT, yang menghasilkan beberapa keluaran yang kurang diinginkan. Namun, Anda dapat membuat string IN dan memasukkannya ke dalam pernyataan Anda.

Pertama, ini contoh tabel saya;

  myNumber    myValue myLetter
---------- ---------- --------
         1          2 A        
         1          4 B        
         2          6 C        
         2          8 A        
         2         10 B        
         3         12 C        
         3         14 A      

Pertama-tama siapkan string untuk digunakan dalam pernyataan IN Anda. Di sini Anda memasukkan string ke "str_in_statement". Kami menggunakan COLUMN NEW_VALUE dan LISTAGG untuk menyiapkan string.

clear columns
COLUMN temp_in_statement new_value str_in_statement
SELECT DISTINCT 
    LISTAGG('''' || myLetter || ''' AS ' || myLetter,',')
        WITHIN GROUP (ORDER BY myLetter) AS temp_in_statement 
    FROM (SELECT DISTINCT myLetter FROM myTable);

String Anda akan terlihat seperti:

'A' AS A,'B' AS B,'C' AS C

Sekarang gunakan pernyataan String dalam kueri PIVOT Anda.

SELECT * FROM 
    (SELECT myNumber, myLetter, myValue FROM myTable)
    PIVOT (Sum(myValue) AS val FOR myLetter IN (&str_in_statement));

Berikut Outputnya:

  MYNUMBER      A_VAL      B_VAL      C_VAL
---------- ---------- ---------- ----------
         1          2          4            
         2          8         10          6 
         3         14                    12 

Namun ada batasannya. Anda hanya dapat menggabungkan string hingga 4000 byte.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Fungsi ABS() di Oracle

  2. Oracle ODP.Net dan EF CodeFirst - Kesalahan SaveChanges

  3. ROWID (Oracle) - ada gunanya?

  4. ORA-01111 dalam MRP dalam database Siaga Fisik

  5. Menghitung perbedaan antara dua cap waktu di Oracle dalam milidetik