LISTAGG - verbinden von Texten zu einer Zeichenkette

jan99

Benutzer
Beiträge
14
Moin !

ich habe eine Abfrage für Adressen in unserer Datenbank.

SELECT
LAGE2.BEZEICHNUNG, HSNR.HAUSNUMMER
from AX_LAGBEZMITHNR HSNR,
AX_LAGEBEZEICHNUNG LAGE1,
AX_LAGBEZKATALOGEINTG LAGE2,
AX_GEBAEUDE G
WHERE HSNR.FID_BEZIEHTSICHAUF = G.FID
AND LAGE1.FID = HSNR.FID_LAGEBEZEICHNUNG
AND LAGE1.land||LAGE1.regierungsbezirk||LAGE1.kreis||LAGE1.gemeinde||LAGE1.lage = LAGE2.SCHLUESSELGESAMT
AND G.FID = 4774647
ORDER BY 2

In der Regel wird immer nur eine Adresse zurückgegeben - aber es gibt auch die anderen Fälle, wo mehrere Adressen zuückgegeben werden.

Das Standardergebnis sieht wie folgt aus:

BEZEICHNUNG HAUSNUMMER
----------- ----------
Achternhof 15
Achternhof 17
Achternhof 19
Achternhof 21
4 rows selected.
Nun wollte ich diese Adressen gerne für die nächste Anwendung zu einer Zeichenkette zusammenfassen und habe hierzu LISTAGG gefunden.

Damit die zusammengehörigen Straßennamen und die Adressse erst einmal ein Wert sind habe ich folgende Anpassung vorgenommen:

SELECT
LAGE2.BEZEICHNUNG, HSNR.HAUSNUMMER,
LAGE2.BEZEICHNUNG||' '||HSNR.HAUSNUMMER Volladresse
FROM
...

Das funktioniert auch schon einmal wieder. Nun sollte die Zusammenfassung kommen und da ist mein Problem...


SELECT
LAGE2.BEZEICHNUNG, HSNR.HAUSNUMMER,
LAGE2.BEZEICHNUNG||' '||HSNR.HAUSNUMMER Volladresse,
LISTAGG(Volladresse, ' , ') within group Volladresse
from AX_LAGBEZMITHNR HSNR,
AX_LAGEBEZEICHNUNG LAGE1,
AX_LAGBEZKATALOGEINTG LAGE2,
AX_GEBAEUDE G
WHERE HSNR.FID_BEZIEHTSICHAUF = G.FID
AND LAGE1.FID = HSNR.FID_LAGEBEZEICHNUNG
AND LAGE1.land||LAGE1.regierungsbezirk||LAGE1.kreis||LAGE1.gemeinde||LAGE1.lage = LAGE2.SCHLUESSELGESAMT
AND G.FID = 4774647
ORDER BY 2

Wenn ich diese Abfrage ausführe, dann bekomme ich die Fehlermeldung:

SQL execution error, ORA-00906: Linke Klammer fehlt

Aber welche Klammer soll da fehlen oder wo ist mein grundlegender Fehler ? Ich habe doch nur die beiden Klammern im Rahmen von LISTAGG verwendet !!!

Kann mir einer weiterhelfen ?

Gruß Jan
 
Werbung:
In diesem Fall fehlt wirklich nur ne Linke Klammer :)
Code:
LISTAGG (measure_column [, 'delimiter'])  WITHIN GROUP (order_by_clause) [OVER (query_partition_clause)]
Das ist die Syntax der Listagg-Funktion -> Klammer nach dem group ist pflicht und auch die order_by-Clause :)

Dass das Group By fehlt kommt dann noch hinzu...
 
Moin !

erst einmal Danke - ich habe mich mal daran versucht (ehrlich: bin noch etwas "wackelig auf den SQL-Beinen")

Daraus ist jetzt

..
LAGE2.BEZEICHNUNG, HSNR.HAUSNUMMER HNr,
LAGE2.BEZEICHNUNG||' '||HSNR.HAUSNUMMER Volladresse,
LISTAGG(Volladresse, ' , ') within GROUP (order by Volladresse) ZusammengefassteAdresse

geworden.

Bekomme aber eine neue Fehlermeldung mit der ich nicht so ganz klar komme.
"
SQL execution error, Der Spaltenname 'VOLLADRESSE' fehlt bzw. ist ungültig."

Aber was soll da jetzt wo ungültig sein mit dem Namen ?

Kann mir nochmal einer weiterhelfen ?

Gruß Jan :)



SQL execution error, Der Spaltenname 'VOLLADRESSE' fehlt bzw. ist ungültig.
 
@akretschmer Hat im Prinzip schon das richtige gesagt... Das ist aber auch von deiner Version abhängig... Wenn du noch ne 8i hast wird selbst das nicht funktionieren... (Mal ganz davon abgesehen dass du dann ganz andere Probleme hättest :) )
 
Werbung:
Moin !

wir haben das jetzt hinbekommen und das Resultat sieht wie folgt aus:

SELECT
LISTAGG(LAGE2.BEZEICHNUNG ||' '|| HSNR.HAUSNUMMER, '-') within GROUP (order by LAGE2.BEZEICHNUNG ||' '|| HSNR.HAUSNUMMER) ZusammengefassteAdresse

from AX_LAGBEZMITHNR HSNR,

AX_LAGEBEZEICHNUNG LAGE1,

AX_LAGBEZKATALOGEINTG LAGE2,

AX_GEBAEUDE G

WHERE HSNR.FID_BEZIEHTSICHAUF = G.FID

AND LAGE1.FID = HSNR.FID_LAGEBEZEICHNUNG

AND LAGE1.land||LAGE1.regierungsbezirk||LAGE1.kreis||LAGE1.gemeinde||LAGE1.lage = LAGE2.SCHLUESSELGESAMT

AND G.FID = 4774647


Gruß jan
 
Zurück
Oben