如何使我的SQL重复查询确保所有列都匹配?

时间:2017-01-17 14:02:01

标签: sql sql-server select sql-update common-table-expression

我目前有一个SQL查询,似乎一次只能占用一列并搜索欺骗。

例如,如果我们有两个记录,其中FIRST =' 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; 

此表中的数据主要只是地址数据。典型的第一/最后/中间地址/城市/州/邮编以及其他两个领域。

我希望能够在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

我们想要忽略它的第一次出现,但是将第二个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 个答案:

答案 0 :(得分:0)

我想出了我的问题。我遗漏的一件事是我需要通过DS ='VOTER'来过滤这些记录,但我把它放在WHERE RN的最后一行> 1.这需要进入上面的选择。

这是我最终使用的。

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;