【发布时间】:2015-10-01 11:16:40
【问题描述】:
我必须编写一个 t-sql 合并语句,我必须满足多个条件才能匹配。
表列名: ID, 电子邮件地址, 名, 姓, 标题, 移动的, 出生日期, 帐号, 地址, 邮政编码
这里的主要问题是,我正在使用的数据库没有必填字段,没有可比较的主键,源表也可以有重复记录。因此,有许多组合可以检查源表与目标表的重复项。我的经理想出了以下方案
我们可以有两个人使用相同电子邮件地址的数据,因此电子邮件地址、名字和姓氏匹配是 100% 匹配(认为其他所有列都是空的)
手机和帐号匹配为 100% 的数据(认为其他所有列均为空)
title、surname、postcode、dob 匹配是 100% 匹配(认为其他所有列都是空的)
我被分配了一项无法查看数据的任务,因为我是一名新员工,而我的员工暂时不希望我看到这些数据。所以,我有点发挥我的想象力。
解决方案现在,我正在考虑而不是检查源数据库的现有记录与目标数据库,我将使用存储过程语句清理源数据,如果它满足一个重复条件,那么它将跳过下一个重复删除语句和将数据插入到目标表中。
with cte_duplicate1 AS
(
select emailaddress, sname, ROW_NUMBER() over(partition by emailaddress, sname order by emailaddress) as dup1
from DuplicateRecordTable1
)
delete from cte_duplicate1
where dup1>1;
(如果执行了第一个 cte_duplicate1 代码,那么它将跳过 cte_duplicate2)
with cte_duplicate2 AS
(
select emailaddress, fname, ROW_NUMBER() over(partition by emailaddress, fname order by emailaddress) as dup2
from DuplicateRecordTable1
)
delete from cte_duplicate2
where dup2>1;
这是目前的模糊计划。不知道能不能实现。
【问题讨论】:
-
请编辑您的查询并提供示例数据和所需的结果。
-
当然是。你至少应该先尝试一些东西,如果它不起作用,你把它贴在这里,我们会提供帮助。虽然两个人有相同的电子邮件????到目前为止,似乎很奇怪
-
这个问题根本不是关于合并的。您在问“我怎样才能编写一个连接条件,以便只有一个条件必须匹配”。
-
谢谢大家。我被告知要编写满足不同匹配条件的合并查询。现在,我将采取不同的方式。我将在数据质量服务中创建规则并检查重复项,清理数据然后合并到目标表中。
-
@MasudAhmed 那么请写下你自己的答案,解释你做了什么,并接受它。这样一来,寻找未解决问题的人(比如我)就不会浪费时间阅读这个问题已经在某个地方的 cmets 中解决了。
标签: sql sql-server tsql