2017-07-07 33 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函数,它给了我想要的结果 –