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

Recolher linhas em uma coluna


Primeiro instale a extensão tablefunc , se ainda não o fez. Precisa ser feito uma vez por banco de dados.
CREATE EXTENSION tablefunc;

Você precisa do PostgreSQL 9.1 para CREATE EXTENSION . Nas versões mais antigas, você precisa executar o script de instalação do shell com um comando como:
psql -d dbname -f SHAREDIR/contrib/tablefunc.sql

Mais informações sobre o Postgres 9.0 no manual de multa .

Então você pode usar uma consulta como esta:
SELECT *
FROM   crosstab (
    'SELECT id
           ,label
           ,value
     FROM   t
     ORDER  BY 1, 2',

    'SELECT DISTINCT label
     FROM   t
     ORDER  BY 1')
AS tbl (
 id   int
,lab1 text
,lab2 text
,lab3 text
,lab4 text
,lab5 text
,lab6 text
);

Retorna exatamente o que você pediu.
Você também pode criar uma função para isso. Adicionei mais informações nesta resposta intimamente relacionada .