sql >> Database >  >> RDS >> PostgreSQL

Gebruik rijwaarden als kolommen in PostgreSQL

Een crosstab() query voor uw voorbeeld zou er als volgt uitzien:

Om 0 in te vullen voor resulterende NULL waarden (verzoek in commentaar), gebruik 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);

Gedetailleerde uitleg en links in dit gerelateerde antwoord:
PostgreSQL Crosstab Zoekopdracht

Terzijde:gebruik het gereserveerde woord "datum" niet als kolomnaam en dat zou u ook niet moeten doen, zelfs als Postgres het toestaat.




  1. Symfony2 creëren en onderhouden van entiteitsrelaties

  2. Hoe u de meest relevante vermeldingen uit de database kunt krijgen en bestellen met meerdere trefwoorden Laravel 5

  3. Verbinding maken met Oracle Database via Excel

  4. Rijrangschikking in een MySQL-weergave