Получить дубликат набора - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь обновить таблицу с повторяющимся идентификатором набора на основе адреса электронной почты. Я смог найти дубликаты, используя этот запрос:

;WITH CTE AS (
    SELECT 
      [First Name]
    , [Last Name]
    , [E-mail Address]
    , ROW_NUMBER() OVER ( PARTITION BY [E-mail Address] ORDER BY [First Name] ) RN
    FROM Contact_Master
)
SELECT * FROM CTE

Что дает мне такую ​​таблицу:

First Name    Last Name    Email Address         RN
-----------------------------------------------------
John          Doe          John.Doe@gmail.com    1
John          Doe          John.Doe@gmail.com    2
Jane          Doe          Jane.Doe@gmail.com    1
Jane          Doe          Jane.Doe@gmail.com    2

Я хочу, чтобы поле RN было уникальным идентификатором за каждый найденный дубликат:

First Name    Last Name    Email Address         RN
-----------------------------------------------------
John          Doe          John.Doe@gmail.com    1
John          Doe          John.Doe@gmail.com    1
Jane          Doe          Jane.Doe@gmail.com    2
Jane          Doe          Jane.Doe@gmail.com    2

1 Ответ

1 голос
/ 18 февраля 2020

Сделайте это следующим образом, используя DENSE_RANK:

;WITH CTE AS (
    SELECT 
      [First Name]
    , [Last Name]
    , [E-mail Address]
    , DENSE_RANK() OVER ( PARTITION BY [E-mail Address] ORDER BY [First Name] ) RN
    FROM Contact_Master
)
SELECT * FROM CTE

- выполните следующие действия:

with Contact_Master as
(
select 1 as id, 'John'   as [First Name]   ,     'Doe'  as [Last Name],        'John.Doe@gmail.com'  as [E-mail Address]  
union select 2, 'John'   ,       'Doe'   ,       'John.Doe@gmail.com'  
union select 3, 'Jane'   ,       'Doe'    ,      'Jane.Doe@gmail.com'   
union select 4, 'Jane'    ,      'Doe'    ,      'Jane.Doe@gmail.com'   
), CTE AS (
    SELECT id,
      [First Name]
    , [Last Name]
    , [E-mail Address]
    , DENSE_RANK() OVER (PARTITION BY [Last Name] ORDER BY [E-mail Address] ) RN
    FROM Contact_Master
)
SELECT * FROM CTE

Вывод:

id  First Name  Last Name   E-mail Address  RN
3   Jane    Doe Jane.Doe@gmail.com  1
4   Jane    Doe Jane.Doe@gmail.com  1
1   John    Doe John.Doe@gmail.com  2
2   John    Doe John.Doe@gmail.com  2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...