1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Datensätze zusammenführen

Dieses Thema im Forum "Microsoft Access" wurde erstellt von Zauberklaus, 15 Januar 2014.

  1. Zauberklaus

    Zauberklaus Neuer Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  3. ukulele

    ukulele Datenbank-Guru

    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.
     
  4. Zauberklaus

    Zauberklaus Neuer Benutzer

    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
     
  5. ukulele

    ukulele Datenbank-Guru

    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.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden