Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Tabela obrotowa/przestawna z agregacją w Oracle

Tak myślę. Łatwo jest wykonać taki obrót za pomocą MAX agregat:

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

W przeciwnym razie musisz zrobić instrukcję case wewnątrz agregacji max. Tak:

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

To prawie to samo, co wykonanie PIVOT . Ale wolałbym zrobić PIVOT nad 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. Uzyskiwanie dostępu do tabeli innego użytkownika w ramach procedury składowanej Oracle

  2. Jak używać Distributed AD, aby skrócić czas instalowania poprawek w Oracle EBS?

  3. Funkcja LN() w Oracle

  4. Jak uruchomić procedurę składowaną w Oracle SQL Developer?

  5. oracle diff:jak porównać dwie tabele?