Mit der array_agg Funktion kann man mehrere Zeilen zu einer zusammenfassen. Das folgende Beispiel gruppiert nach Matrikelnr., Abschluss und Studiengang-Nr, so daß alle Fächer nach Fachnummer sortiert in einem Array stehen:
select S.matrikel_nr,S.studiengang_nr,D.abschluss_str, array_agg(D.stg_str) as faecher into temp tmp_1 from sos_stg_aggr S, dim_studiengang D where S.tid_stg=D.tid and S.sem_rueck_beur_ein=20142 and S.stichtag=1 group by 1,2,3 ,fach_nr order by 1,2 ,3,fach_nr;
Man kann dieses Array dann wieder ausgeben
- als eigene Spalte pro Array Element, also z.B.
select matrikel_nr,studiengang_nr,abschluss_str, faecher[1],faecher[2] from tmp_1;
- oder als eine Spalte mit einem langen String und Trennzeichen, mit der Funktion array_to_string(anyarray, text text) , also z.B.
select matrikel_nr,studiengang_nr,abschluss_str, array_to_string(faecher, ',','leer') from tmp_1;
Das letzte Argument ist optional und ersetzt NULLs durch einen String.