0

我有一个访问订单数据库,其中包含一个名为“CustomerName”的字段中的 500 多个客户名称

问题是输入订单后,我们的销售团队有时会输入不同的名称。(“ACME Inc”与“ACME, Inc.”)所以现在我有几个客户实际上是同一家公司,但看起来不同。

到目前为止,我已经编写了一个显示不同 CustomerName 值的查询,现在我需要一个基本上可以遍历所有这些并向我显示名称相似的查询。也许如果名字的前十个字母匹配?或者理想情况下,如果名称的字母有一定百分比匹配。

我不知道如何做到这一点,任何帮助表示赞赏。

非常感谢!

4

4 回答 4

1

您只有 500 个客户名称。取唯一的名称并将它们放入 Excel。对它们进行排序并将“真实”客户名称分配给它们。

这应该不到一个小时。

然后,将其上传到数据库中的新表。新表将具有“真实客户名称”和“替代名称”。访问表时,进行连接以获取真实姓名。

这解决了眼前的问题。

然后,您可以更新数据库中的数据以使用“真实”名称。

并且,您可以将输入法更改为以下之一:

  • 让销售人员从有效名称列表中进行选择。或者,通过一个过程来创建一个新客户。
  • 如果客户名称不在“真实”列表中,则拒绝将数据上传到系统中。然后手动添加名称,如果是真正的新客户,并重新加载数据。

您正在处理 500 个名称,而不是 500,000 个名称。手动过程是非常可行的。试图让 SQL 匹配相似的名称是很困难的。你会花更多的时间来做这件事,而不是实际解决问题。

于 2013-07-17T18:46:10.593 回答
1

您可以拆分“”上的所有客户列,并在 like 子句中将它们与 % 连接起来,这将有助于找到 ACME, Inc,因为它会匹配 %ACME%Inc% 以及 ACME Inc

如果没有一个带有欺骗性的大型公司数据库,我很难对此进行测试,但也许这个想法会有所帮助。

于 2013-07-17T18:18:51.860 回答
1

这取决于名称的变化方式。如果它只是标点符号、大小写等,您可以去掉这些并在此基础上进行比较。如果它更复杂,例如“Inc, ACME”与“ACME Incorporated”,您将不得不编写一个函数来比较两个字符串以对它们进行评分/排名。

找出两个字符串的相似程度

上面的链接是另一个 SO question,它讨论了通常用于执行此操作的不同算法。

Excel中的Levenshtein距离

上面的链接是一个 SO question,它实现了 VBA 中的一种方法

于 2013-07-17T18:23:34.970 回答
0

此语法适用于 sql server。访问的逻辑将相同。我不确定语法。这是一个自我加入。

select your fields
from yourtable t1 join yourtable t2
on left(t1.namefield, 10) = left(t1.namefield, 10)
and t1.namefield <> t2.namefield

这为您提供前 10 个字符相同的记录。但是,对于您正在尝试的内容,我认为它不够彻底。我认为您必须遍历整个数据库。

此外,在修复过去之前,您可能需要考虑修复未来。换句话说,做一些事情来防止再次发生,这样你只需要做一次这项工作。

于 2013-07-17T18:24:55.657 回答