Installez d'abord l'extension tablefunc , si vous ne l'avez pas déjà fait. Doit être fait une fois par base de données.
CREATE EXTENSION tablefunc;
Vous avez besoin de PostgreSQL 9.1 pour CREATE EXTENSION
. Dans les anciennes versions, vous devez exécuter le script d'installation à partir du shell avec une commande telle que :
psql -d dbname -f SHAREDIR/contrib/tablefunc.sql
Plus d'informations pour Postgres 9.0 dans le manuel fin .
Ensuite, vous pouvez utiliser une requête comme celle-ci :
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
);
Renvoie exactement ce que vous avez demandé.
Vous pouvez également créer une fonction pour cela. J'ai ajouté plus d'informations dans cette réponse étroitement liée
.