首页 > 解决方案 > 识别 SQL Server 中的相似记录

问题描述

我正在清理客户表。客户表接收来自 4 个不同来源的数据,并且有许多重复记录。我正在使用规则组合来识别类似的客户记录。我的规则是:

  1. 他们有相同的名字、姓氏、电子邮件和手机
  2. 他们有相似的姓氏、手机和电子邮件
  3. 他们有相似的名字、姓氏和电子邮件。

我想为他们分配一个新的 unique_id,如下面的输出:

预期产出

这是表和数据的代码:

CREATE TABLE dbo.customer(
customer_id int,
first_name varchar(100),
last_name varchar(100),
email varchar(100),
mobile varchar(20),
unique_id int)
GO

INSERT INTO dbo.customer(customer_id, first_name, last_name, email, mobile)
values (5475872,'','SMITH','john.smith@fakeemail.com','123456'),
(623073,'JOHN','SMITH','john.smith@fakeemail.com','123456'),
(1286681,'JOHN','SMITH','john.smith@fakeemail.com','123456'),
(1303103,'JOHN','SMITH','john.smith@fakeemail.com','123456'),
(7063902,'JOHN','SMITH','john.smith@fakeemail.com','987654'),
(1808155,'JOHN','SMITH','john.smith@fakeemail.com','123456'),
(2151985,'','SMITH','john.smith@fakeemail.com','123456'),
(7221764,'JOHN','SMITH','john.smith@fakeemail.com','987654'),
(1870704,'JOHN','','john.smith@fakeemail.com','123456'),
(887842,'BILL','GATES','bill@microsoft.com','555555'),
(736363,'','GATES','bill@microsoft.com','555555')
GO

谁能帮助我如何根据不同的组合生成该 unique_id 列?

谢谢

标签: sql-servertsqlssis

解决方案


您可以使用以下代码查找重复记录,因为电子邮件在您的所有搜索条件中似乎是唯一且常见的。通过加入 Customer_id 在更新中使用,然后选择结果。

 UPDATE C 
 SET C.unique_id =  B.Unique_id
 FROM 
 customer AS C 
    INNER JOIN 
     ( Select 
       DENSE_rank() over ( order by  email desc) AS Unique_id  
       ,customer_id
        from customer 
     )  AS B on  C.customer_id = B.customer_id

  SELECT *  FROM dbo.customer

结果


推荐阅读