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

Rotate/pivot table dengan agregasi di Oracle

Ya saya pikir begitu. Sangat mudah untuk melakukan pivot seperti ini dengan MAX agregat:

SELECT
    *
FROM
(
    SELECT
        project,
        attribute,
        value
    FROM
        table1
) AS SourceTable
PIVOT
(
    MAX(value)
    FOR attribute IN ([foo],[bar],[baz])
) AS pvt

Kalau tidak, Anda harus melakukan pernyataan kasus di dalam agregat maks. Seperti ini:

SELECT
    MAX(CASE WHEN attribute='foo' THEN value ELSE NULL END) AS foo,
    MAX(CASE WHEN attribute='bar' THEN value ELSE NULL END) AS bar,
    MAX(CASE WHEN attribute='baz' THEN value ELSE NULL END) AS baz,
    project
FROM
    table1
GROUP BY
    project

Ini hampir sama dengan melakukan PIVOT . Tapi saya lebih suka melakukan PIVOT di atas CASE WHEN MAX ..




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tipe Data Rekaman Berbasis Kursor Dengan Kursor Mengembalikan Beberapa Nilai Dalam Database Oracle

  2. Mengapa CONNECT BY LEVEL pada tabel mengembalikan baris tambahan?

  3. JDBC ResultSet dapatkan kolom dengan alias tabel

  4. Jumlah baris Oracle tabel dengan count(*) vs NUM_ROWS dari DBA_TABLES

  5. Cara memanggil metode super objek Oracle PL/SQL