am Thu, dem 11.11.2004, um 21:25:16 +0100 mailte Holger Dietze folgendes:
Hallo Andreas,
Hi, wie geht es Dir?
Gibt es einen eleganteren Weg, als mittels plpgsql durch die Tabelle zu watscheln und INSERTs zu bilden? Irnkwie hab ich grad einen Denk-Aussetzer...
Ja.
Ich ahnte es...
Ziel ist, falls das interessiert, eine Kreuz-Tabelle. Dazu gibt es im contrib von PostgreSQL eine Funktion, nur brauche ich dazu eine Hilfstabelle in dieser Form.
Brauchst Du nicht, es geht auch mit Sub-Select. Oder View.
insert into t2 (id1,id2) select i1,i2 from (select distinct id1 as i1 from t1) as s1, (select distinct id2 as i2 from t1) as s2;
Oh man, sieht sogar einfach aus. In einer NG bekam ich eben auch schon eine Antwort, aber Deine sieht deutlich angenehmer aus.
(schon getestet mit postgresql 7.4.2-4)
test_db=# select version(); version ------------------------------------------------------------------------------------------------------ PostgreSQL 7.4.5 on i386-pc-linux-gnu, compiled by GCC i386-linux-gcc (GCC) 3.3.4 (Debian 1:3.3.4-9)
Der Trick ist der Self-Join ueber die Sub-Queries. Bei vielen Datensaetzen in t1 koennte je ein Index ueber id1 und id2 die Performance verbessern.
Jo, Danke. Mir schwebte ja im Prinzip Deine Lösung vor, nur war ich zu blöd, dies korrekt zu formulieren. Mal sehen, ob ich morgen (sofern ich dazu komme) meine Kreuztabelle hinbekomme. Ich habe N Abteilungen und M Fehlerursachen, Ziel ist eine Tabelle mit M Spalten und N Zeilen und in den Zellen dann die Summe der durch Reklamationen entstandenen Gutschriften. Diese Ergebnistabelle kann ich dann direkt via ODBC dem Controlling ins Excel knallen - fertich.
PS.: SQL ist irnkwie auch was geiles. Man muß es nur können...
Andreas