Es ist alles im Titel. Dokumentation hat etwas Ähnliches:Können die Kategorien in der postgres tablefunc-Funktion crossstab() ganze Zahlen sein?
SELECT *
FROM crosstab('...') AS ct(row_name text, category_1 text, category_2 text);
Ich habe zwei Tabellen, lab_tests
und lab_tests_results
. Alle lab_tests_results
Zeilen sind an die Primärschlüssel-ID-Ganzzahl in der lab_tests
Tabelle gebunden. Ich versuche, eine Pivot-Tabelle zu machen, wo die Labortests (identifiziert durch eine Ganzzahl) Zeilenköpfe sind und die entsprechenden Ergebnisse in der Tabelle sind. Ich kann einen Syntaxfehler um oder um die ganze Zahl nicht umgehen.
Ist dies mit der aktuellen Einrichtung möglich? Fehle ich etwas in der Dokumentation? Oder muss ich einen inneren Join der Art durchführen, um die Kategorien Strings zu machen? Oder ändern Sie die lab_tests_results
Tabelle, um eine Textkennung für die Labortests zu verwenden?
Danke für die Hilfe, alle. Sehr geschätzt.
Bearbeiten: Habe es mit Hilfe von Dmitry herausgefunden. Er hatte das Datenlayout herausgefunden, aber ich wusste nicht, welche Art von Ausgabe ich brauchte. Ich habe versucht, die Pivot-Tabelle auf Batch_ID-Nummern in der Tabelle lab_tests_results basieren zu lassen. Musste die Base-Abfrage und Casting-Datentypen hämmern.
SELECT *
FROM crosstab('SELECT lab_tests_results.batch_id, lab_tests.test_name, lab_tests_results.test_result::FLOAT
FROM lab_tests_results, lab_tests
WHERE lab_tests.id=lab_tests_results.lab_test AND (lab_tests.test_name LIKE ''Test Name 1'' OR lab_tests.test_name LIKE ''Test Name 2'')
ORDER BY 1,2'
) AS final_result(batch_id VARCHAR, test_name_1 FLOAT, test_name_2 FLOAT);
Diese eine Pivot-Tabelle wie unten aus der lab_tests_results Tabelle:
batch_id |test_name_1 |test_name_2
---------------------------------------
batch1 | result1 | <null>
batch2 | result2 | result3
Dank Dmitry. Habe die Ausgabe, die ich herausfinden wollte, von dem, was du geliefert hast. Bearbeitete meinen ursprünglichen Beitrag, um das zu zeigen. – user1644030