PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Réduire les lignes en une seule colonne

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 .