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 .