【问题标题】:How can I delete completely duplicate rows from a query, without having a unique value for it?如何从查询中删除完全重复的行,而没有唯一值?
【发布时间】:2026-02-03 01:10:01
【问题描述】:

我在从 MS Access 数据库表中获取信息时遇到问题。我需要一个代码计数,但我不必考虑重复行,这意味着我需要删除所有重复行。

这里有一个例子来说明我需要什么:

Code | Name 

12 | George
20  | John 
12 | George 
33 | John

我需要首先删除具有相同代码的两行,然后我需要计算其余表数据的名称,例如这将是我期望的结果:

Name | Count

John | 2

我已经有一个查询可以为我执行此操作,但需要大约 1 小时才能获得大约 5000 行,我需要更高效的方法。我的查询:

  select name, count(*) from Table
  where name = '" + input_name + "'
    and code in (select code from Table group by code
                 having count(code) = 1)
  group by name
  order by count(name) desc;

如果有任何建议,我将不胜感激。

【问题讨论】:

  • 通常使用DISTINCT 完成。还是有理由避免这种情况?
  • 我不能使用的原因是我需要完全删除多行,DISTINCT对重复保持唯一值。
  • Excel 部分在哪里?

标签: sql excel vba ms-access


【解决方案1】:

我可能建议在子查询中过滤原始数据集,而不是使用in,例如:

select u.name, count(*)
from (select t.code, t.name from yourtable t group by t.code, t.name having count(*) = 1) u
group by u.name

在这里,将yourtable 更改为您的表名。

【讨论】:

  • 我已经尝试过类似的操作,但我收到一条错误消息,提示“运行时错误 '-21472117904 (80040e10)': No value given for a or more required parameters”。我不清楚代码总是在变化的原因是否会影响这个解决方案。
  • 您是否使用我发布的代码收到该错误?
  • 正确,我使用了你建议的查询
  • 实际上我再次尝试了您的解决方案,并且成功了!非常感谢!看来我可能错过了上次输入的内容。