sql >> Databasteknik >  >> RDS >> Oracle

Rotera/pivotera tabell med aggregering i Oracle

Ja jag tror det. Det är lätt att göra en pivot som denna med en MAX sammanlagd:

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

Annars måste du göra en case-sats i a max-aggregatet. Så här:

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

Detta är nästan samma sak som att göra PIVOT . Men jag skulle föredra att göra PIVOT över CASE WHEN MAX ..




  1. Hur kontrollerar jag om en begränsning finns i SQL-servern?

  2. Hur man ansluter en Oracle-databas från PHP

  3. Varför får jag PLS-00302:komponent måste deklareras när den finns?

  4. Hur använder du WITH-satsen i MySQL?