【问题标题】:How do I make my SQL duplicate query make sure all columns match?如何使我的 SQL 重复查询确保所有列都匹配?
【发布时间】:2017-06-01 15:13:52
【问题描述】:

我目前有一个 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; 

此表中的数据大多只是地址数据。典型的 First/Last/Middle Address/City/State/Zip 以及其他两个字段。

我希望能够对 N 个重复项中的一个进行 SET(如果有 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 编码为重复,即使它与第一个不同。

【问题讨论】:

  • 添加一些示例表数据和预期结果 - 以及格式化文本。
  • 您的查询似乎符合您的要求。
  • @GordonLinoff 我觉得它在过去工作过,但由于某种原因,这次它似乎不能正常工作。知道为什么吗?
  • @jarlh 查看更新。
  • @rohanharrison:查看此链接以改进问题:spaghettidba.com/2015/04/24/…

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


【解决方案1】:

我发现了我的问题。我在帖子中遗漏的一件事是我需要通过 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; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多