In Oracle 11gRel2 gibt es eine neue Gruppierungsfunktion das LISTAGG. Mit dieser Funktion ist man in der Lage, Spaltenwerte einer Wiederholungsgruppe in einer Zeile zusammenzufassen getrennt durch ein definiertes Trennzeichen.
Beispiel:
Inhalt der Tabelle Team:
GRUPPE NAME
==================== ============
Team Blau Harald
Team Blau Robert
Team Blau Thomas
Team Gelb Alex
Team Gelb Sabine
Team Rot Angelika
Team Rot Uwe
Erzeugen einer Mitgliederliste pro Team:
select distinct
gruppe
,listagg(name,‘;‘)
within group (order by name asc)
over (partition by gruppe) as mitglieder
from teams
order by gruppe
;
Ergebnis:
GRUPPE MITGLIEDER
==================== ==============================
Team Blau Harald;Robert;Thomas
Team Gelb Alex;Sabine
Team Rot Angelika;Uwe
Die Wiederholungsgruppe wird über die Klausel PARTITION BY <COLUMN> angegeben, die Sortierung innerhalb der Liste über die Klausel ORDER BY <COLUMN>. In der Funktion LISTAGG bestimmt die erste Angabe die Spalte, die als Liste zusammengefasst werden soll, die zweite Angabe das Trennzeichen.
Bildnachweise: ©Fotolia_60505744_S-ci.jpg