2017-07-07 35 views
1

我在EXCEL/SQL表中有一個列示例數據如下。 想分組類似的記錄。在Excel或SQL解決方案應該沒問題。單列查找類似值

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

預期的輸出可能排序相似度

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

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

你是什麼意思的組類似的記錄?你能解釋清楚嗎? –

+3

https://stackoverflow.com/questions/14700074/how-to-find-the-match-between-text-that-typo-in-excel基本上由soundex排序() – xQbert

回答

1

這比一個完整的答案評論,但可以引導你在正確的方向。

您必須定義一個相似性度量標準,它比較兩個字符串並返回一個量化它們之間相似度的值。參見例如A better similarity ranking algorithm for variable length strings。如何在SQL查詢中使用它取決於您正在使用的DBMS。您還必須建立您要定義爲「足夠接近」的此度量標準的閾值。

然後,你可以寫一個SQL查詢是這樣的:

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; 

其中sim_metric()是你相似的功能和similarity_threshold是您選擇的門檻。將每組相似名稱中的一個名稱用作組名。

+0

非常感謝。它確實有幫助。基於鏈接中給出的C#代碼創建了一個CLR函數,它給了我想要的結果 –