【问题标题】:Finding Duplicates in Access with more than 2 columns as basis and results在 Access 中以超过 2 列作为基础和结果查找重复项
【发布时间】:2013-07-15 18:01:30
【问题描述】:

我有一个包含 11 列的访问表。

  • 周期年
  • 周期周期
  • 时期区
  • PHSR 代码
  • 姓氏
  • 名字
  • 中国
  • 专业
  • HCP 类型
  • 机构

我想使用 LastnameFirstnameInstitution 作为查找重复项的基础,为其查找重复项。 p>

示例表:

    PeriodYear  PeriodCycle  PeriodZone  PHSRCode  Lastname  Firstname  PRC  Specialty  HCPType  Class  Institution

    2013        1            1           SF1-01    Almeda    Sancho     111  GP         CON      A      PGH
    2013        1            2           SF1-01    Almeda    Sancho     111  GP         CON      A      LPDH
    2013        1            3           SF1-01    Almeda    Sancho     222  GP         CON      A      PGH

结果应该是:

    PeriodYear  PeriodCycle  PeriodZone  PHSRCode  Lastname  Firstname  PRC  Specialty  HCPType  Class  Institution

    2013        1            1           SF1-01    Almeda    Sancho     111  GP         CON      A      PGH
    2013        1            3           SF1-01    Almeda    Sancho     222  GP         CON      A      PGH

查询将基于来自变量的字段PeriodYearPeriodCyclePHSRCode

这可能吗?

【问题讨论】:

  • 解决方案应包括GROUP BY 以及HAVING COUNT 子句。
  • 您的两个表格样本之间存在差异,LPDH 已变为 PGH0 - 这是故意的吗?为什么它会返回 111 而不是 PGH 的 222?在尝试创建查询之前,您需要从逻辑上考虑这些事情。
  • @AndyG :这对 PGH0 来说是我的坏事。那应该是 PGH 作为示例表中的第三项。重复仅主要出现在姓氏、名字和机构中。因此,PRC 的差异应该可以忽略不计,除非最终用户想要包括,在这种情况下,我可以从给出的答案中解释它。

标签: sql ms-access vb6


【解决方案1】:

首先创建一个“指针”查询来确定所有具有欺骗性的记录:

SELECT LastName, FirstName, Institution, Sum(1) as CNT
FROM MyTableName
GROUP BY LastName, FirstName, Institution
HAVING (Sum(1) > 1)

调用那个 Query1 什么的。

然后在这些字段上 LEFT JOIN Query1 到 MyTableName,并使用 WHERE 子句根据您的变量只保留您想要的数据:

SELECT B.*
FROM Query1 A
LEFT JOIN MyTableName B
ON A.LastName = B.LastName 
AND A.FirstName = B.FirstName
AND A.Institution = B.Institution
WHERE B.PeriodYear = Forms!frmMyForm!txtPeriodYear
AND B.PeriodCycle = Forms!frmMyForm!txtPeriodCycle
AND B.PHSRCode = Forms!frmMyForm!txtPHSRCode

你显然需要做一些调整,但这应该会给你正确的想法。

【讨论】:

  • 你说得对,我需要做一些调整。不过有一个问题,是否可以从“指针”查询中执行 WHERE 子句,还是会影响性能?
  • 我认为你可以安全地做到这一点,如果有的话它会提高性能,因为第二个查询会查看更少的记录。我们在谈论多少条记录; 100 的数千,还是 100 的数百万?
  • 从统计上讲,我们每个月会查看大约 10,000 条记录,这样一年内就会累积到大约 100,000 条以上。而且由于我们将记录保存在大约两年,因此在归档之前数据可能会达到 300,000 多条记录。
  • 应该没问题。我已经处理了 1.5B+ 的记录,尽管此时最好在 SQL Server 中有后端。 Access 中 50 万条记录的处理速度应该很快。
  • 谢谢。我已经尝试了您的查询并根据我的需要对其进行了一些修改,这确实是我想要的。谢谢你的回答。
猜你喜欢
  • 2021-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多