sql >> Base de Datos >  >> RDS >> PostgreSQL

Contraer filas en una columna

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 .