【问题标题】:SQL duplicate records using not likeSQL重复记录使用不喜欢
【发布时间】:2017-10-26 14:07:17
【问题描述】:

您好,我有一个table,如下所示:

First Name | Last Name | Employee number
James        Smith       1234
James Tim    Smith       1234
Jim          Baker       1234
Jen          King        5678
Jenny        King        5678

我想返回根据名字和姓氏组合将相同员工编号分配给不同人员的员工。 我基本上想返回映射到员工编号 1234 的记录,因为 Jim Barker 和 James Smith 绝对不是同一个人,但我们可以假设 Jen King 和 Jenny King 是同一个人。

谢谢

【问题讨论】:

  • 用想要的结果编辑问题。
  • Fuzzy string comparison 可能会有所帮助。谷歌并检查stackoverflow.com/questions/921978/fuzzy-matching-using-t-sql
  • 似乎是架构问题。您应该有一个存储姓名和员工编号的表,其中员工编号是根本不能重复的主键。其他任何地方都应该只使用员工编号,而不是重复存储名称。
  • “我们可以假设 Jen King 和 Jenny King 是同一个人”。 “安娜·史密斯”和“安娜贝尔·史密斯”也会这样吗?还有“安娜·史密斯”和“安娜玛丽亚·史密斯”?那么“安娜贝尔史密斯”会是“安娜玛丽亚史密斯”吗?显然,您需要的不仅仅是性格比较。包含名称匹配的某些表可能会或更好地手动对具有多个不同名称的所有员工编号进行比较。
  • 您应该按员工编号对结果进行分组,并通过按姓氏或名字再次分组来过滤结果两次

标签: sql sql-server data-analysis


【解决方案1】:

我会使用窗口函数:

select e.*
from (select e.*, count(*) over (partition by employeenumber) as cnt
      from employees e
     ) e
where cnt > 1
order by employeenumber;

然后您可以评估员工编号重复是否有意义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多