Oracle
 sql >> Base de données >  >> RDS >> Oracle

Rotation/tableau croisé dynamique avec agrégation dans Oracle

Oui je pense que oui. Il est facile de faire un pivot comme celui-ci avec un MAX agrégé :

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

Sinon, vous devez faire une déclaration de cas à l'intérieur de l'agrégat a max. Comme ceci :

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

C'est presque la même chose que de faire le PIVOT . Mais je préférerais faire le PIVOT sur le CASE WHEN MAX ..