PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Comprimi le righe in una colonna

Innanzitutto installa l'estensione tablefunc , se non l'hai già fatto. Deve essere eseguito una volta per database.

CREATE EXTENSION tablefunc;

Hai bisogno di PostgreSQL 9.1 per CREATE EXTENSION . Nelle versioni precedenti devi eseguire lo script di installazione dalla shell con un comando come:

psql -d dbname -f SHAREDIR/contrib/tablefunc.sql

Maggiori informazioni per Postgres 9.0 nel manuale fine .

Quindi puoi utilizzare una query come questa:

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
);

Restituisce esattamente ciò che hai chiesto.
Puoi anche creare una funzione per questo. Ho aggiunto ulteriori informazioni in questa risposta strettamente correlata .