sql >> Base de Datos >  >> RDS >> PostgreSQL

Problemas de tabulación cruzada/pivote de PostgreSQL

Caso de prueba (forma preferida de proporcionar datos de muestra):

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

Consulta:

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

Devuelve exactamente el resultado representado en su pregunta. Si un PagerNumber puede ser algo más que un bigint válido número, usa text en su lugar.

La respuesta a la que se refiere en su pregunta estaba desactualizada y, para empezar, nunca fue correcta. Agregué una respuesta adecuada con explicación y enlaces allí.