Moin !

ich möchte Ihnen eine „Erkenntnis“ weitergeben die wir in den letzten Tagen unter Hilfestellung des MuM-Supportes realisiert haben.

Es geht darum das wir im Rahmen der Alkis uns die Straßennamen und die Adressen in einem Tooltipp anzeigen lassen wollten. Würde jedes Haus nur eine Adresse habe und damit einen Datensatz, dann wäre das Ganze nicht das Problem. Es gibt aber im Kataster bei uns Gebäudegrundrisse die mehr als eine Adresse haben.

Ein Tooltipp in MapEdit kann aber nur das Ergebnis von einem Datensatz anzeigen und daher musste ein Weg gefunden werden die Daten zusammenzuführen. Im SQL gibt es hierfür eine Funktion [b]LISTAGG[/b] mit der dieses vollzogen werden kann.

Im nachfolgenden Ausdruck werden zunächst der Straßenname (Lage2.Bezeichnung) und die Hausnummer zusammengefasst und mit Hilfe von LISTAGG werden diese Adressen zu einer Zeichenkette verknüpft. Noch sind die einzelnen Adressen mit einem Bindestrich getrennt.
[code]
SELECT
LISTAGG(LAGE2.BEZEICHNUNG ||‘ ‚|| HSNR.HAUSNUMMER, ‚-‚) within GROUP (order by LAGE2.BEZEICHNUNG ||‘ ‚|| HSNR.HAUSNUMMER) Zusammen
from AX_LAGBEZMITHNR HSNR,
….
AND {filter}
[/code]

Der Aufbau der Zeichenkette wird über GROUP, was ein Pflichtparameter in Verbindung mit LISTAGG ist, sortiert.

Der etwas kniffelige Teil kommt jetzt weil MapEdit voraussetzt, dass der SQL-Ausdruck für die Tooltipps mit den Werten FID und GEOM beginnt. Werden diese beiden Variablen ergänzt zu …

[code]SELECT
f.fid, f.geom,
LISTAGG(LAGE2.BEZEICHNUNG ||‘ ‚|| HSNR.HAUSNUMMER, ‚-‚) within GROUP (order by LAGE2.BEZEICHNUNG ||‘ ‚|| HSNR.HAUSNUMMER) Zusammen
from AX_LAGBEZMITHNR HSNR,[/code]

dann kommt es unweigerlich zu einer Fehlermedung, weil GEOM sich nicht gruppieren lässt – auch wenn im Grunde ein und dasselbe Objekt beschrieben wird.

Daher kann die Lösung, wie vom MuM-Support bereitgestellt, nur so aussehen:

[code]SELECT
(select fid from AX_gebaeude a where a.fid=f.fid) as fid,(select b.geom from ax_gebaeude b where b.fid=f.fid) as geom,
LISTAGG(LAGE2.BEZEICHNUNG ||‘ ‚|| HSNR.HAUSNUMMER, ’n‘) within GROUP (order by LAGE2.BEZEICHNUNG ||‘ ‚|| HSNR.HAUSNUMMER) Zusammen
from AX_LAGBEZMITHNR HSNR,
AX_LAGEBEZEICHNUNG LAGE1,
AX_LAGBEZKATALOGEINTG LAGE2,
AX_GEBAEUDE f
WHERE HSNR.FID_BEZIEHTSICHAUF = f.fid
AND LAGE1.FID = HSNR.FID_LAGEBEZEICHNUNG
AND LAGE1.land||LAGE1.regierungsbezirk||LAGE1.kreis||LAGE1.gemeinde||LAGE1.lage = LAGE2.SCHLUESSELGESAMT
AND {filter}
GROUP BY F.FID
[/code]

… und wie das Ergebnis zeigt hat es geklappt

[img size=300]http://www.tappenbeck.net/forum/mapedit/jata_tooltipp_multihausnummern.png[/img]

Der Zeilenumbruch wird durch den Seperator „n“ im SQL-Ausdruck erzwungen.

Ich hoffe, dass es dem einen oder anderen weiterhelfen kann bei vergleichbaren Aufgaben und wenn mir ein Fehler unterlaufen sein sollte in sachlichen Zusammenhängen, dann bitte darf gerne korregiert werden.

Gruß aus Lübeck
Jan Tappenbeck

Gorden Kock
Author: Gorden Kock