【发布时间】:2014-11-20 17:20:57
【问题描述】:
我有一个大型客户数据库,在某些情况下会多次添加客户,这会导致问题。我可以使用查询来识别完全匹配的记录,尽管有些记录有细微的变化,例如不同的地址或名字。
我想查询 10 个字段,有些记录将匹配所有 10 个字段,这显然是重复的,尽管其他字段可能只匹配 5 个字段与另一条记录,需要进一步调查。因此,我想创建一个结果集,其中包含有多少个字段已匹配的字段。基本上,要创建可能罩的评级,结果是实际匹配。所有 10 个都是明确的重复,但 5 个只是可能的重复。
有些只会匹配 POSTCODE 和 FIRSTNAME,通常可以打折。
这样的事情有帮助,但因为它只返回与所有 3 条记录显式匹配的记录,由于数据量太大,它并不是真正有用。
SELECT field1,field2,field3, count(*)
FROM table_name
GROUP BY field1,field2,field3
HAVING count(*) > 1
【问题讨论】:
-
有很多方法可以做到这一点。您可以执行常规连接条件,然后为每一列使用 case 表达式。如果 table1.field1 = table2.field2 然后 1 结束...对每一列重复。然后你可以很容易地知道有多少列匹配。
-
潜在客户群有几千、几百万、??
-
要明确一点:您希望将每一行与所有其他行进行比较,以确定有多少列是完全匹配的“计数”?你说的是交叉连接(主键不相同,因为它们总是完全匹配),如果有超过一千行左右,这将非常昂贵。
-
@pmbAustin 如果您使用正确的分组集,则不需要交叉连接
标签: sql sql-server count duplicates