我目前有一个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编码为副本,即使它与第一个不同。
答案 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;