sql >> Databáze >  >> RDS >> Oracle

Rotační/kontingenční tabulka s agregací v Oracle

Myslím, že ano. Je snadné udělat pivot, jako je tento, pomocí MAX agregát:

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

V opačném případě musíte provést příkaz case uvnitř agregace max. Takhle:

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 je téměř totéž jako provedení PIVOT . Ale raději bych udělal PIVOT přes CASE WHEN MAX ..




  1. Řešení dlouhodobých dotazů MySQL

  2. rozdělit řetězec do několika řad

  3. SQL Server Vysoká dostupnost:Nainstalujte SQL Server cluster s podporou převzetí služeb při selhání, část 2

  4. Jak zpozdím sloupce v MySQL?