Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使SQL重复查询确保所有列都匹配?_Sql_Sql Server_Select_Sql Update_Common Table Expression - Fatal编程技术网

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

如何使SQL重复查询确保所有列都匹配?,sql,sql-server,select,sql-update,common-table-expression,Sql,Sql Server,Select,Sql Update,Common Table Expression,我目前有一个SQL查询,它似乎一次只取一列并搜索重复项 所以,例如,如果我们有两个记录,第一个='Charles',但他们的姓氏都不同,它仍然会将其视为重复。我希望我的duplicates查询确保所有列完全匹配,以将其计为一个副本 这是我的问题 WITH cte AS (SELECT *, Row_Number() OVER(partition BY fips_county_code, last, suffix, first, birthdate Ord

我目前有一个SQL查询,它似乎一次只取一列并搜索重复项

所以,例如,如果我们有两个记录,第一个='Charles',但他们的姓氏都不同,它仍然会将其视为重复。我希望我的duplicates查询确保所有列完全匹配,以将其计为一个副本

这是我的问题

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_code列设置为D

目前的工作方式是,如果我们有

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


这将被视为一个副本,它将Zyta Stevenson编码为一个副本,即使它与第一个不同。

我解决了我的问题。我在帖子中遗漏的一件事是,我需要按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; 

添加一些示例表数据和预期结果,以及格式良好的文本。您的查询似乎可以执行您想要的操作。@GordonLinoff我觉得它在过去一直有效,但由于某种原因,这次似乎无法正常工作。知道原因吗?@jarlh-See-updated@rohanharrison:查看此链接以改进问题: