Datensätze zusammenführen

Zauberklaus

Neuer Benutzer
Beiträge
2
Hallo Datenbankgötter,


ich kann meine Aufgabe leider nicht alleine lösen und brauche Hilfe. Ich würde mich freuen wenn Ihr mir bei der Lösung meines Problems helfen könnt, falls mein Problem bereits in einem anderen Thread gelöst wurde habe ich diesen nicht gefunden bzw. unter den falschen Stichwörtern gesucht...nun denn



Ich habe Zwei Excel Tabellen die den gleichen Ort beschreiben, eine vom Landesvermessungsamt – die andere vom Einwohnermeldeamt:

Tab1: Plz,Ort,Straße,Hausnummer,Adresszusatz,Anzahl_Hausbewohner (1300 Datensätze)

Tab2: Plz,X-Koordinate,Y-Koordinate,Ort,Straße,Hausnummer,Adresszusatz (1600 Datensätze)

Ziel: Tab2 soll mit der Anzahl_Hausbewohner aus Tab1 gefüttert werden!



Mein Problem, es gibt keine Identifikationsnummern der Datensätze.

Die Straßenbezeichnung (welche ich anfänglich in Verbindung mit der Hausnummer zum Verknüpfen der Tabellen nutzen wollte) variiert von Tab1 zu Tab2 – also Str. - Straße und andere Abkürzungen von langen Straßennamen.

Meine Idee ist die Abfrage eines Teils der Zeichenkette, also wenn z.B. die ersten 5 Zeichen der Zeichenkette von Straße in Tab1 und Tab2 übereinstimmen, dann Überprüfe ob die Hausnummer Übereinstimmt, dann Überprüfe den Adresszusatz, wenn dieser Übereinstimmt dann ordne Anzahl_Bewohner aus Tab1 dem passenden Datensatz in Tab2 zu.

Leider konnte ich bis jetzt keine funktionierende Abfrage erstellen, hat jemand eine Vorstellung wie diese aussehen könnte. Sicherlich gibt es auch einen besseren Lösungsweg/Ansatz.



Vielen Dank für eure Vorschläge!

Software die mir zur Verfügung steht und ich halbwegs beherrsche: Access, Excel, ArcGIS
 
Werbung:
Leider konnte ich bis jetzt keine funktionierende Abfrage erstellen, hat jemand eine Vorstellung wie diese aussehen könnte. Sicherlich gibt es auch einen besseren Lösungsweg/Ansatz.

Schlecht. Mir würden Funktionen einfallen, die die Ähnlichkeit zweiter Wörter/String ermitteln:

Code:
test=*# select 'dorfstr.' <-> 'dorfstraße' ;
 ?column?
----------
 0.416667
(1 row)

Time: 0,154 ms
test=*# select similarity('dorfstr.','dorfstraße') ;
 similarity
------------
  0.583333
(1 row)

http://www.postgresql.org/docs/9.3/interactive/pgtrgm.html

Aber das mit Access oder so? Keine Ahnung. Du könntest das mit PG versuchen, die Daten als CSV reinziehen und damit arbeiten. Da Du mit ArcGIS arbeitest, wäre für Dich vielleicht das sogar in Hinblick auf PostGIS interessant.
 
Mit Access oder Excel käme ich da auch nicht weiter, würde auch SQL empfehlen.

Mit replace() Funktionen könnte man zumindest alle Straßen-Varianten korrigieren. Von der Idee mit den ersten 5 Zeichen halte ich gar nichts, da wird es massenhaft Falschzuordnungen geben. similarity() habe noch nicht genutzt, aber auch das könnte in großen Städten zu Problemen führen.

In jedem Fall würde ich nur möglichst eindeutige Zuordnungen produzieren. Sobald mehrere in Frage kommen ist die Methode scheisse.
 
Ich habe es jetzt folgendermaßen gelöst:

Die ersten 7 Zeichen der Zeichenkette Straßenname aus beiden Tabellen auslesen lassen und in ein neues Feld [STRN] hinzufügen.

UPDATE Tabelle1 SET STRN = Left([STR],7);
UPDATE Tabelle2 SET STRN = Left([STR],7);

In beiden Tabellen die leeren Felder der Spalte Adresszusatz[ZUS], wo A,B,C, etc. oder eben Nichts drin stand, mit Nullen auffüllen lassen. (Um später beim Inner Join einen Vergleichswert zu erstellen)

UPDATE Tabelle1 SET Tabelle1.ZUS = "0" WHERE (((Tabelle1.ZUS)=""));
UPDATE Tabelle2 SET Tabelle2.ZUS = "0" WHERE (((Tabelle2.ZUS)=""));

Über INNER JOIN die Datensätze zusammenführen mit den Vergleichsbedingungen STRN = STRN, dann Hausnummer = Hausnummer und Adresszusatz = Adresszusatz.

SELECT
Tabelle1.STRN,
Tabelle1.HNR,
Tabelle1.ZUS,
Tabelle2.STRN,
Tabelle2.HNR,
Tabelle2.ZUS,
Tabelle2.X,
Tabelle2.Y,
Tabelle1.hws,


FROM Tabelle1

INNER JOIN Tabelle2

ON (Tabelle1.STRN = Tabelle2.STRN)

AND (Tabelle1.HNR = Tabelle2.HNR)

AND (Tabelle1.ZUS = Tabelle2.ZUS;

Nach einer Inkosistenzabfrage bleiben nur 5 Datensätze übrig die er nicht zuordnen konnte.
Die Zuordnung der Datensätze scheint zu stimmen.

Vielleicht kann ich dem einen oder anderen damit helfen.

Viele Grüße
 
Werbung:
Wenn
Code:
SELECT
Tabelle.STRN,
Tabelle.HNR,
Tabelle.ZUS
FROM Tabelle
die gleiche Anzahl an Ergebnissen liefert wie
Code:
SELECT DISTINCT
Tabelle.STRN,
Tabelle.HNR,
Tabelle.ZUS
FROM Tabelle
dann sind deine Datensätze alle eindeutig. Das wäre sehr beruhigend.
 
Zurück
Oben