[Oracle] Ausgabe SQL in einer Zeile

maljian

Grünschnabel
Hi

Ich bin dabei eine Abfrage zu erstellen, wo mir das Ergebnis als .csv ausgegeben werden soll.

SQL:
SELECT a.id
      ,a.inhalt
      ,a.inhalt2
      ,b.ergebnis
      ,b.inhalt
 FROM a
 JOIN b on (a.id = b.a_id)

Jetzt ist es so, das mehrere Einträge in b die gleiche a_id haben können. Ich möchte bei dem csv File jedoch nur eine Zeile je a.id haben und alles was in b den selben a_id hat, soll in der gleichen Zeile hinten angefügt werden.

Irgendwie habe ich dort leider ein Verständnisproblem. Vielleicht ist es ja recht einfach.
Ich hoffe ich habe mich verständlich ausgedrückt.

Danke schonmal für eure Hilfe.

Nadine
 
Was verstehst du mit "hinten angefügt werden" ?

Eventuell ist LISTAGG() etwas, dass die weiterhelfen könnte
 
In dem csv sollen die Daten dann wie folgt ausgegeben werden

a.id; a.inhalt; a.inhalt2; b.nr; b.ergebnis; b.inhalt; (Kopfzeile)
a.1; a.inhalt; a.inhalt2; b.1; b.ergebnis; b.inhalt; b.2; b.ergebnis; b.inhalt; b.3; b.ergebnis; b.inhalt;
a.2; a.inhalt; a.inhalt2; b.1; b.ergebnis; b.inhalt; b.2; b.ergebnis; b.inhalt;
a.3; a.inhalt; a.inhalt2;

Je nachdem wie viele Einträge es in b mit der a_id hat, sollen diese in der gleichen Zeile ausgegeben werden.
Wenn jetzt kein Ergebnis für die a_id vorhanden ist, wird auch nur der erste Teil ausgegeben, wie im Beispiel a.3.

b.nr ist eine fortlaufende Nummer je a_id.

Ich werde mir deinen Vorschlag mit dem LISTAGG anschauen und mich dann später wieder melden.
 
Zuletzt bearbeitet:
Das wirst du so nicht direkt mit SQL herausbringen. Da musst du mit einer Programmiersprache nachhelfen.

Wenn du das beeinflussen kannst, dann mach das nicht so. Der Empfänger des CSV muss dann wieder ein Algorithmus schreiben, um das ganze zurückzuformen
 
Der Empfänger des CSV möchte es so haben.

Meine Lösung sieht nun wie folgt aus:
SQL:
soutput VARCHAR2(2000);

soutput := a.id;
soutput := soutput||';'||a.inhalt;
soutput := soutput||';'||a.inhalt2;

for cb in (SELECT *
             FROM b
            WHERE b.a_id = a.id
) loop

soutput := soutput||';'||cb.nr;
soutput := soutput||';'||cb.ergebnis;
soutput := soutput||';'||cb.inhalt;

end loop;

Nicht schön, aber es funktioniert.
 
Zurück