PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Use valores de linha como colunas no PostgreSQL


Um crosstab() consulta para o seu exemplo ficaria assim:

Para preencher 0 para o resultado NULL valores (solicite no comentário), use 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);

Explicação detalhada e links nesta resposta relacionada:
PostgreSQL Crosstab Consulta

A parte:não usar a palavra reservada "data" como nome da coluna e você também não deveria, mesmo que o Postgres permita.