PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL-Kreuztabellen-/Pivot-Probleme

Testfall (bevorzugte Methode zur Bereitstellung von Beispieldaten):

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

Abfrage:

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

Gibt genau das in Ihrer Frage dargestellte Ergebnis zurück. Wenn eine PagerNumber kann etwas anderes als ein gültiger bigint sein Nummer, verwenden Sie text stattdessen.

Die Antwort, auf die Sie sich in Ihrer Frage beziehen, war veraltet und zunächst nie korrekt. Ich habe dort eine richtige Antwort mit Erklärung und Links hinzugefügt.