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
.