Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Rotations-/Pivot-Tabelle mit Aggregation in Oracle

Ja, ich denke schon. Mit einem MAX ist es einfach, einen solchen Pivot durchzuführen aggregiert:

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

Andernfalls müssen Sie innerhalb des a max -Aggregats eine case-Anweisung ausführen. So:

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

Das ist fast das Gleiche wie beim PIVOT . Aber ich würde lieber den PIVOT machen über den CASE WHEN MAX ..