sql >> Database teknologi >  >> RDS >> Oracle

Roter/pivot tabel med aggregering i Oracle

Ja det tror jeg. Det er nemt at lave et pivot som dette med en MAX samlet:

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

Ellers skal du lave en sagserklæring inde i a max-aggregatet. Sådan:

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

Dette er næsten det samme som at udføre PIVOT . Men jeg ville foretrække at lave PIVOT over CASE WHEN MAX ..




  1. Lær, hvordan du håndterer undtagelser i PL/SQL

  2. SQL-serverens ydeevnemålinger for at være på forkant med spillet

  3. Tilføjelse af flere avancerede funktioner såsom administration af kategorier og afstemning om tråde og indlæg

  4. POSTGRESQL udenlandsk nøgle, der refererer til primære nøgler af to forskellige tabeller