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

Problèmes de tableau croisé/pivot PostgreSQL

Scénario de test (moyen préféré pour fournir des exemples de données) :

CREATE TEMP TABLE prefs (pref_id int, pref_name text, pref_value text);

INSERT INTO prefs VALUES 
 (1, 'PagerNumber' , '2125551234')
,(2, 'PagerCarrier', '@att.com')
,(3, 'PagerCarrier', '@something.com');

Requête :

SELECT *
FROM   crosstab(
       'SELECT pref_id, pref_name, pref_value
        FROM   prefs
        ORDER  BY 1, 2',

       $$VALUES ('PagerNumber'::text), ('PagerCarrier')$$
       )
AS x (section text, pager_number bigint, pager_carrier text);

Renvoie exactement le résultat décrit dans votre question. Si un PagerNumber peut être autre chose qu'un bigint valide numéro, utilisez text à la place.

La réponse à laquelle vous faites référence dans votre question était obsolète et jamais correcte au départ. J'ai ajouté une réponse appropriée avec explication et liens là-bas.