2017-07-07 15 views
1

Ich habe eine Spalte Beispieldaten in EXCEL/SQL-Tabelle wie folgt. Möchten ähnliche Datensätze gruppieren. Lösung in Excel oder SQL sollte in Ordnung sein.Einzelne Spalte Ähnliche Werte finden

GOPAL 
Ramesh 
A.GOPAL 
SRINIVAS 
Ramesh Reddy 
G.SRINVIASA RAO 

Die erwartete Ausgabe vielleicht auf Ähnlichkeit Sortierung

GOPAL 
A.GOPAL 
Ramesh 
Ramesh Reddy 
SRINIVAS 
G.SRINVIASA RAO 

oder

GOPAL Group1 
A.GOPAL Group1 
Ramesh Group2 
Ramesh Reddy Group2 
SRINIVAS Group3 
G.SRINVIASA RAO Group3 
+0

Was meinst du mit Gruppe ähnliche Datensätze? Kannst du es deutlich erklären? –

+3

https://stackoverflow.com/questions/14700074/how-to-find-the-match-between-text-that-typo-in-excel grundsätzlich sortieren nach soundex() – xQbert

Antwort

1

Dies ist eher ein Kommentar als eine vollständige Antwort, aber können Sie in die richtige Richtung lenken.

Sie müssen eine Ähnlichkeitsmetrik definieren, die zwei Strings vergleicht und einen Wert zurückgibt, der die Ähnlichkeit zwischen ihnen quantifiziert. Siehe beispielsweise A better similarity ranking algorithm for variable length strings. Wie Sie das für die Verwendung in einer SQL-Abfrage implementieren, hängt davon ab, welches DBMS Sie verwenden. Sie müssen außerdem einen Schwellenwert für diese Metrik festlegen, die als "nahe genug" definiert werden soll.

Dann können Sie ein SQL-Abfrage so etwas schreiben:

select 
    a_val as group, 
    b_val as stringval 
from 
    (
    select 
     a_val, 
     b_val, 
     similarity 
    from 
     (
     select 
      a.stringval as a_val, 
      b.stringval as b_val, 
      sim_metric(a.stringval, b.stringval) as similarity 
     from 
      stringlist as a, 
      stringlist as b 
     where 
      b.stringval >= a.stringval 
     ) as sim 
    where 
     similarity > similarity_threshold 
    ) as grp 
order by 
    a_val; 

wo sim_metric() Ihre Ähnlichkeitsfunktion ist und similarity_threshold ist die gewählte Schwelle. Ein Name in jeder Gruppe ähnlicher Namen wird als Gruppenname verwendet.

+0

Vielen Dank. Es hilft wirklich. Erstellt eine CLR-Funktion basierend auf dem C# -Code, der in der Verknüpfung angegeben ist, und gibt mir die gewünschten Ergebnisse –