test=*# select * from werte;
id | typ | wert
----+-----+------
1 | pH | 2
1 | OD | 3.8
2 | pH | 1.8
2 | OD | 4.2
3 | pH | 3.2
3 | OD | 2.2
(6 rows)
Time: 3.969 ms
test=*# select id, sum(case when typ = 'pH' then wert else 0 end) as ph, sum(case when typ = 'OD' then wert else 0 end) as od from werte group by id order by id;
id | ph | od
----+-----+-----
1 | 2 | 3.8
2 | 1.8 | 4.2
3 | 3.2 | 2.2
(3 rows)
wow, besten Dank Andreas…das hilft mir schonmal ungemein weiter. Ich hatte schon geahnt, dass die Lösung eher schlicht ist, hatte aber keinen Ausgangspunkt. Vielen Dank!
Ein letztes noch: wie könnte eine Lösung aussehen bei der die Abfrage selber ermittelt, welche Datentypen es gibt. Wenn z.B. noch ein dritter Messwert hinzukäme und dann automatisch eine dritte Column benötigt wird. Fall du da ein paar Hints hast, mache ich mich in der Lit. auf die Suche.
Man könnte ermitteln, welche DISTINCTen Möglichkeiten es gibt, damit in einer PLPGSQL-Function ein dynamisches SQL basteln und dieses via EXECUTE ausführen.
Hallo Andreas, ich werde mich da mal ranwagen und versuchen eine Lösung zu basteln.
In deiner Lösung adressierst du die einzelen Felder direkt über ihre einfachen Namen. Ich muss bei mir immer alles so angeben: public.“tabelle”.“feld”, sonst erhalte ich immer eine Fehlermeldung. Kann man das umkonfigurieren (arbeite unter Win32) ?
Im Postgres-Source Tree unter ‘contrib’ findest du die sog. tabletools, die Funktionen zum erstellen sog. crosstabs oder Pivot-Tabellen bieten.
Das sollte deine Probleme auch lösen können.
Gruß Uwe
EDIT: Hab das mit Windows nicht gesehen , das sollte sich dann im Installer einrichten lassen
[quote=“Gisman”]Im Postgres-Source Tree unter ‘contrib’ findest du die sog. tabletools, die Funktionen zum erstellen sog. crosstabs oder Pivot-Tabellen bieten.
Das sollte deine Probleme auch lösen können.
Gruß Uwe
Hi, ich hatte das gleiche Problem und hab die crosstab funktion verwendet. Ich habe allerdings 190 Parameter die nachher zu Spalten konvertiert werden, deshalb möchte ich Angabe der neuen Spaltennamen und -typen gerne automatisieren.
Mit dem Beispiel in der Readme zu den Tabletools kann ich nicht viel anfangen, da Anfänger:-( Kann mir da jemand weiterhelfen bezüglich des Erstellens einer geeigneten Funktion?
Grüße in die Pfalz, auch meine Heimat;-)
Christian
Versuch, das erst einmal mit 3 oder 4 Parametern händisch zu verstehen. Dann kann man sich dranmachen, das via einer Funktion zu machen, ist letztendlich nur a bissl String-Gefummel, den man dann via EXECUTE verarbeiten kann.