Primero instale la extensión tablefunc , si aún no lo has hecho. Debe hacerse una vez por base de datos.
CREATE EXTENSION tablefunc;
Necesita PostgreSQL 9.1 para CREATE EXTENSION
. En versiones anteriores, debe ejecutar el script de instalación desde el shell con un comando como:
psql -d dbname -f SHAREDIR/contrib/tablefunc.sql
Más información para Postgres 9.0 en el manual fino .
Entonces puedes usar una 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
);
Devuelve exactamente lo que solicitó.
También puede crear una función para eso. Agregué más información en esta respuesta estrechamente relacionada
.