TSQL - 重复数据删除报告 - 分组

时间:2017-12-19 22:14:12

标签: sql-server tsql

所以我正在尝试创建一个对重复记录进行排名的报告,其背后的想法是客户想要合并从迁移中产生的大量重复记录。

我需要排名,以便我的报告可以显示哪条记录应该是“主要”记录,即记录中会丢失数据。

重复定义非常简单:

  

如果电子邮件地址相同,那么它始终是重复的,如果   电子邮件不匹配,那么名字,姓氏和手机必须   匹配。

排名将基于表格中的一大堆列,所以:

电子邮件地址不是NULL = 50 电话号码不是NULL = 20

等。以重复组中最高的数字为准,成为主要记录。这是我遇到问题的地方,我似乎找不到为每个重复集获取增量数的方法。这是我到目前为止的一些代码:

(我在临时表和CTE表达式中取出了一些等级列来缩短它)

DECLARE @tmp_Duplicates TABLE (
      tmp_personID      INT
    , tmp_Firstname     NVARCHAR(100)
    , tmp_Surname       NVARCHAR(100)
    , tmp_HomeEmail     NVARCHAR(300)
    , tmp_MobileNumber  NVARCHAR(100)
    --- Ratings
    , tmp_HomeEmail_Rating  INT
    --- Groupings
    , tmp_GroupNumber   INT
)

;WITH cteDupes AS 
(
    SELECT  ROW_NUMBER() OVER(PARTITION BY personHomeEmail ORDER BY personID DESC) AS RND,
            ROW_NUMBER() OVER(PARTITION BY personHomeEmail ORDER BY personId)      AS RNA,
              p.personID, p.PersonFirstName, p.PersonSurname, p.PersonHomeEMail
            , personMobileTelephone
    FROM    tblCandidate c INNER JOIN tblPerson p ON c.candidateID = p.personID
)
INSERT INTO @tmp_Duplicates
SELECT  PersonID, PersonFirstName, PersonSurname, PersonHomeEMail, personMobileTelephone
        , 10, RND
FROM    cteDupes
WHERE RNA + RND > 2
ORDER BY personID, PersonFirstName, PersonSurname


SELECT * FROM @tmp_Duplicates

这给了我想要的结果,但是组号没有显示我需要的方式:

enter image description here

我需要的是每个组都是增量值:

enter image description here

0 个答案:

没有答案