Как сделать так, чтобы SQL-запрос дублировал все столбцы?

В настоящее время у меня есть SQL-запрос, который, кажется, принимает только один столбец за раз и ищет дураков.

Так, например, если у нас есть две записи с первым = ‘Charles’, но обе их фамилии разные, это все равно будет считаться дубликатом. Я хочу, чтобы мой запрос дубликатов удостоверился, что все столбцы идеально совпадают, чтобы считать его дубликатом.

Это мой запрос

WITH cte
     AS (SELECT *,
                Row_Number() OVER(partition BY fips_county_code, last, suffix, first, birthdate Order by (select null)) AS Rn
         FROM   WORK)
UPDATE cte
SET    BAD_CODES = Isnull(BAD_CODES, '') + 'D'
WHERE  RN > 1; 

Данные в этой таблице в основном просто адресные данные. Типичный первый/последний / средний Адрес / город/штат / Zip и, возможно, два других поля.

Я хочу иметь возможность установить на один из N дубликатов (если есть 4 дубликата, игнорируйте первый и установите другие).

Например, если у нас есть

ZYTA    B   ZAJACZKOWSKA            100 Malberry Ln TX  73301   052 435345543345    A                   003     D

и

ZYTA    B   ZAJACZKOWSKA            100 Malberry Ln TX  73301   052 435345543345    A                   003     D

мы хотели бы проигнорировать первое вхождение it, но установить второй столбец One BAD_CODES В D.

В настоящее время путь он работает, если мы имеем

ZYTA    B   ZAJACZKOWSKA            100 Malberry Ln TX  73301   052 435345543345    A                   003     D

и

ZYTA        Stevenson           100 Meow Ln 73301   052 435345543345    A                   003     D

Это будет считаться дубликатом, и он будет кодировать Zyta Stevenson как дубликат, даже если это не то же самое, что первый.

1 ответ

  1. Я понял свою проблему. Одна вещь, которую я пропустил из своего поста, заключалась в том, что мне нужно было фильтровать эти записи DS =’VOTER’, но я ставил это на последнюю строку в WHERE RN > 1. Это необходимо для перехода в select выше.

    Это то, что я в конечном итоге использовал.

    WITH cte
         AS (SELECT *,
                    Row_Number() OVER(partition BY fips_county_code, last, suffix, first, birthdate Order by (select null)) AS Rn
             FROM   WORK
             WHERE DS = 'VOTER')
    UPDATE cte
    SET    BAD_CODES = Isnull(BAD_CODES, '') + 'D'
    WHERE  RN > 1;