sql >> Databasteknik >  >> RDS >> PostgreSQL

Använd radvärden som kolumner i PostgreSQL

En crosstab() fråga för ditt exempel skulle se ut så här:

För att fylla i 0 för resulterande NULL värden (begäran i kommentaren), använd COALESCE() :

SELECT brand_id
     , COALESCE(jan, 0) AS "Jan-2012"
     , COALESCE(feb, 0) AS "Feb-2012"
     , COALESCE(mar, 0) AS "Mar-2012"
     , COALESCE(apr, 0) AS "Apr-2012"
FROM crosstab(
       'SELECT brand_id, month, total
        FROM   brands
        ORDER  BY 1'

       ,$$VALUES ('Jan-2012'::text), ('Feb-2012'), ('Mar-2012'), ('Apr-2012')$$
 ) AS ct (
   brand_id int
 , jan numeric    -- use actual data type!
 , feb numeric
 , mar numeric
 , apr numeric);

Detaljerad förklaring och länkar i detta relaterade svar:
PostgreSQL Crosstab Fråga

Bortsett från:att inte använda det reserverade ordet "datum" som kolumnnamn och du borde inte heller, även om Postgres tillåter det.




  1. Vad är skillnaden mellan schema och databas?

  2. Oracle SQL infogar flera rader och returnerar något

  3. Automatisk ökning för Oracle

  4. En beroende egenskap i en ReferentialConstraint mappas till en butiksgenererad kolumn