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.