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

Problemi con le tabelle incrociate/pivot di PostgreSQL

Test case (modo preferito per fornire dati di esempio):

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

Domanda:

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

Restituisce esattamente il risultato illustrato nella tua domanda. Se un PagerNumber può essere qualcosa di diverso da un bigint valido numero, usa text invece.

La risposta a cui ti riferisci nella tua domanda era obsoleta e mai corretta all'inizio. Ho aggiunto una risposta adeguata con spiegazione e link lì.