Ich habe eine Kundendatenbank mit Verschiedenen Tabellen.
Tabelle1: Kundennummer, Vorname, Name etc, und eine Daten
Tabelle 2: Kundennummer, elektronische_Adresse, Adressart etc.
Nun kann es natürlich sein, dass eine Kundennummer in der Tabelle 2 mehrmals erscheint, falls der Kunde verschiedene Tel-Nr. hat.
Soweit so gut. Nur wie müsste die Abfrage lauten, damit mein Ergebnis in etwa so aussieht:
Kundennummer, Vorname, Nachname, elektronische Adresse 1, elektronische Adresse 2, elektronische Adresse3, usw. also alles in EINER ZEILE.
Soweit wär ich im Moment:
select a.Kundennummer, a.Vorname, a.Name, b.elektronische_Adresse from Tabelle1
left outer join Tabelle2
on a.Kundennummer = b.Kundennummer
Allerdings erhalte ich die Daten so natürliche mehrzeilig, was ich nicht möchte.
test=*# select * from kunden;
id | name
----+------
1 | ich
2 | du
(2 Zeilen)
Zeit: 0,281 ms
test=*# select * from kunden2;
id | email
----+--------
1 | email1
1 | email2
1 | email3
2 | email5
2 | email6
(5 Zeilen)
test=# CREATE FUNCTION comma_aggregate(text,text) RETURNS text AS ' SELECT CASE WHEN $1 <> '''' THEN $1 || '', '' || $2 ELSE $2 END; ' LANGUAGE sql IMMUTABLE STRICT; CREATE AGGREGATE comma (basetype=text, sfunc=comma_aggregate, stype=text, initcond='' );
CREATE FUNCTION
Zeit: 28,129 ms
CREATE AGGREGATE
Zeit: 20,901 ms
test=*# select k.id, k.name, comma(k2.email) from kunden k left join kunden2 as k2 on (k.id=k2.id) group by 1,2;
id | name | comma
----+------+------------------------
2 | du | email5, email6
1 | ich | email1, email2, email3
(2 Zeilen)