"Ähnliche" Duplikate

PeterP4LE

Benutzer
Beiträge
7
Guten Tag,

ich habe folgendes Problem:

Ich hab historisch bedingt eine Tabelle, die Adressdaten enthält.

Der Aufbau der Tabelle ist dabei (gekürzt):

Name | Vorname | Firma | Strasse
Mustermann | Max | Eugen Müller GmbH | Mustergasse
Tester | Toni | Moritz Maier KG | Teststrasse 1
Versuch | Volker | Müller Eugen GmbH | Mustergasse 1
Try | Theo | Ernst Maier GmbH | Veruschsweg 2

Was ich brauche ist ein Select der mir einen Teil des Spalte Firma nimmt und Duplikate ausgibt:

Das Ergebnis wäre dann in meinem kleinen Beispiel:
Mustermann | Max | Eugen Müller GmbH | Mustergasse
Versuch | Volker | Müller Eugen GmbH | Mustergasse 1


Mustermann | Max | Eugen Müller GmbH | Mustergasse
Versuch | Volker | Müller Eugen GmbH | Mustergasse 1

Tester | Toni | Moritz Maier KG | Teststrasse 1
Try | Theo | Ernst Maier GmbH | Veruschsweg 2

Tester | Toni | Moritz Maier KG | Teststrasse 1
Try | Theo | Ernst Maier GmbH | Veruschsweg 2


Hat dazu jeman eine Idee?

Vielen Dank im Vorfeld.

LG

Peter
 
Werbung:
Manuell kriegt man so eine Suche problemlos hin aber eine automatische Suche oder gar Erkennung von Dubletten ist nicht so einfach.

Ein Ansatz wäre alle Firmen zu zerlegen und die einzelnen Worte als n:m-Beziehung abzubilden um sie dann nach Übereinstimmungen zu gliedern. Sonderzeichen und Schreibweisen sind natürlich auch nicht ohne.

Ich hab sowas gebastelt und versuche das mal in vereinfachter Form weiter zu geben:
Code:
DECLARE    @pk UNIQUEIDENTIFIER,
        @bezeichnung VARCHAR(255),
        @counter INT

SET        @counter = (    SELECT    count(*)
                        FROM    unternehmen )
WHILE    @counter > 0
BEGIN
    SET        @pk = (    SELECT    pk
                    FROM (    SELECT    TOP (@counter) pk,
                                    ROW_NUMBER() OVER (ORDER BY pk) AS zeilennr
                            FROM    unternehmen
                            ORDER BY pk ) x
                    WHERE    x.zeilennr = @counter )

    SET        @bezeichnung = (    SELECT    bezeichnung
                                FROM    unternehmen
                                WHERE    pk = @pk )

    -- Phase 1.1: Zeichen durch Zeichen ersetzen
    SET        @bezeichnung = lower(@bezeichnung)
    SET        @bezeichnung = replace(@bezeichnung,'','')
    SET        @bezeichnung = replace(@bezeichnung,'²','2')
    SET        @bezeichnung = replace(@bezeichnung,'³','3')
    SET        @bezeichnung = replace(@bezeichnung,'ß','ss')
    SET        @bezeichnung = replace(@bezeichnung,'@','at')
    SET        @bezeichnung = replace(@bezeichnung,'€','e')
    SET        @bezeichnung = replace(@bezeichnung,'ä','ae')
    SET        @bezeichnung = replace(@bezeichnung,'ö','oe')
    SET        @bezeichnung = replace(@bezeichnung,'ü','ue')
    SET        @bezeichnung = replace(@bezeichnung,'á','a')
    SET        @bezeichnung = replace(@bezeichnung,'é','e')
    SET        @bezeichnung = replace(@bezeichnung,'í','i')
    SET        @bezeichnung = replace(@bezeichnung,'ó','o')
    SET        @bezeichnung = replace(@bezeichnung,'ú','u')
    SET        @bezeichnung = replace(@bezeichnung,'à','a')
    SET        @bezeichnung = replace(@bezeichnung,'è','e')
    SET        @bezeichnung = replace(@bezeichnung,'ì','i')
    SET        @bezeichnung = replace(@bezeichnung,'ò','o')
    SET        @bezeichnung = replace(@bezeichnung,'ù','u')
    SET        @bezeichnung = replace(@bezeichnung,'â','a')
    SET        @bezeichnung = replace(@bezeichnung,'ê','e')
    SET        @bezeichnung = replace(@bezeichnung,'î','i')
    SET        @bezeichnung = replace(@bezeichnung,'ô','o')
    SET        @bezeichnung = replace(@bezeichnung,'û','u')
    -- Phase 1.2: Zeichen durch Leerzeichen ersetzen
    SET        @bezeichnung = replace(@bezeichnung,'°',' ')
    SET        @bezeichnung = replace(@bezeichnung,'^',' ')
    SET        @bezeichnung = replace(@bezeichnung,'!',' ')
    SET        @bezeichnung = replace(@bezeichnung,'"',' ')
    SET        @bezeichnung = replace(@bezeichnung,'§',' ')
    SET        @bezeichnung = replace(@bezeichnung,'$',' ')
    SET        @bezeichnung = replace(@bezeichnung,'[%]',' ')
    SET        @bezeichnung = replace(@bezeichnung,'/',' ')
    SET        @bezeichnung = replace(@bezeichnung,'=',' ')
    SET        @bezeichnung = replace(@bezeichnung,'\',' ')
    SET        @bezeichnung = replace(@bezeichnung,'#',' ')
    SET        @bezeichnung = replace(@bezeichnung,'.',' ')
    SET        @bezeichnung = replace(@bezeichnung,'[_]',' ')
    SET        @bezeichnung = replace(@bezeichnung,'&',' ')
    SET        @bezeichnung = replace(@bezeichnung,'+',' ')
    SET        @bezeichnung = replace(@bezeichnung,'-',' ')
    -- Phase 1.3: Zeichen tilgen
    SET        @bezeichnung = replace(@bezeichnung,'{','')
    SET        @bezeichnung = replace(@bezeichnung,'(','')
    SET        @bezeichnung = replace(@bezeichnung,'[','')
    SET        @bezeichnung = replace(@bezeichnung,']','')
    SET        @bezeichnung = replace(@bezeichnung,')','')
    SET        @bezeichnung = replace(@bezeichnung,'}','')
    SET        @bezeichnung = replace(@bezeichnung,'?','')
    SET        @bezeichnung = replace(@bezeichnung,'´','')
    SET        @bezeichnung = replace(@bezeichnung,'`','')
    SET        @bezeichnung = replace(@bezeichnung,'*','')
    SET        @bezeichnung = replace(@bezeichnung,'~','')
    SET        @bezeichnung = replace(@bezeichnung,'''','')
    SET        @bezeichnung = replace(@bezeichnung,'>','')
    SET        @bezeichnung = replace(@bezeichnung,'<','')
    SET        @bezeichnung = replace(@bezeichnung,'|','')
    SET        @bezeichnung = replace(@bezeichnung,';','')
    SET        @bezeichnung = replace(@bezeichnung,',','')
    SET        @bezeichnung = replace(@bezeichnung,':','')
    SET        @bezeichnung = replace(@bezeichnung,'·','')
    -- Phase 1.4: Wörter durch Wörter ersetzen
    SET        @bezeichnung = replace(@bezeichnung,' and ',' und ')
    SET        @bezeichnung = replace(@bezeichnung,'mbh co kg','mbhcokg')
    SET        @bezeichnung = replace(@bezeichnung,'gesellschaft',' gesellschaft')
    SET        @bezeichnung = replace(@bezeichnung,'genossenschaft',' genossenschaft')
    -- Phase 1.3: Zeichen tilgen
    WHILE    @bezeichnung LIKE '%  %'
    BEGIN
        SET        @bezeichnung = replace(@bezeichnung,'  ',' ')
    END

    -- Phase 2: Wörterliste befüllen
    SET        @bezeichnung = rtrim(ltrim(@bezeichnung))

    WHILE    len(@bezeichnung) >= 4
    BEGIN
        IF        @bezeichnung LIKE '% %'
        BEGIN
            IF        len(left(@bezeichnung,charindex(' ',@bezeichnung)-1)) >= 4
            BEGIN
                INSERT INTO unternehmen_woerter(fk_unt,string)
                VALUES(@pk,left(@bezeichnung,charindex(' ',@bezeichnung)-1))
            END

            SET        @bezeichnung = right(@bezeichnung,len(@bezeichnung)-charindex(' ',@bezeichnung))
        END
        ELSE
        BEGIN
            IF        len(@bezeichnung) >= 4
            BEGIN
                INSERT INTO unternehmen_woerter(fk_unt,string)
                VALUES(@pk,@bezeichnung)
            END
           
            SET        @bezeichnung = ''
        END
    END

    SET        @counter = @counter - 1
END
Das filtert erstmal jede Menge Zeugs und trennt dann die Wörter auf. Darauf kannst du dann Abfragen machen.
 
Werbung:
Zurück
Oben