【发布时间】:2018-05-03 18:56:16
【问题描述】:
我还是数据库方面的新手,所以请耐心等待。我已经阅读了许多类似的问题,但似乎没有一个是在谈论我面临的同一个问题。
只是关于我在做什么的一些信息,我有一个填充了联系信息的表格,并且一些联系人是重复的,但大多数重复的行都有一个截断的电话号码,这使得这些数据毫无用处。
我编写了以下查询来搜索重复项:
WITH CTE (CID, Firstname, lastname, phone, email, length, dupcnt) AS
(
SELECT
CID, Firstname, lastname, phone, email, LEN(phone) AS length,
ROW_NUMBER() OVER (PARTITION BY Firstname, lastname, email
ORDER BY Firstname) AS dupcnt
FROM
[data.com_raw]
)
SELECT *
FROM CTE
WHERE dupcnt > 1
AND length <= 10
我假设此查询将根据我指定的三列查找所有具有重复项的记录,并选择 dupcnt 大于 1 的任何记录,以及长度小于或等于的电话列10. 但是当我多次运行查询时,每次执行都会得到不同的结果集。我在这里一定缺少一些逻辑,但我对此完全感到困惑。所有的列都是varchar 数据类型,除了CID,它是int。
【问题讨论】:
-
@JNevill,您应该将其发布为答案。
-
这将是一个简短的评论,然后它离开了我。我将作为答案发布。
-
JNevill 成功了!但我有点困惑为什么。这个表上没有索引,所以系统不会使用全表扫描导致它查看所有内容,并且不会丢失任何记录吗? count(*) 与 ROW_NUMBER() 有何不同?我需要对此进行更多研究。但非常感谢您快速而有用的回复!
标签: sql-server tsql