【问题标题】:Get a Count of a Field Including Similar Entries MS Access获取包含类似条目的字段计数 MS Access
【发布时间】:2015-06-16 16:34:38
【问题描述】:

大家好,我正在尝试解析访问数据库中的所有重复项。我希望数据库可用于访问文盲,因此我正在尝试设置可以在不了解程序的情况下运行的查询。

我的数据库设置的名称字段中的条目偶尔会附加特殊字符。我有兴趣根据字段 field1 和名称检查重复条目。如何将具有特殊字符的条目的计数与非特殊字符对应项包括在内?这是否可以在一个步骤中完成,还是我需要先添加一个步骤来清理数据?

目前我的代码(如下所示)只返回不包括特殊字符的条目的计数。

SELECT 
    table.[field1], 
    table.[Name], 
    Count(table.[Name]) AS [CountOfName]
FROM 
    table
GROUP BY 
    table.[field1], 
    table.[Name]
HAVING 
    (((table.[Name]) Like "*") AND ((Count(table.[Name]))>1));

我尝试在 Like 语句中添加一个前导空格(Like “*”),但返回的结果为零。

附注。我也试过用 Replace 语句来替换特殊字符,但是没有用。

field1 ##

  • 1234567
  • 1234567
  • 4567890
  • 4567890

名字##

  • 布莱恩
  • 布莱恩
  • 特德
  • ted‡

结果
字段1 1234567

名称 布莱恩

名称计数 2

【问题讨论】:

  • 您能展示一些示例数据吗?顺便说一句,* 是 Access 中的通配符条目,因此 * 可以是 * 或 Paulwhatever you want it to be1235817 Aug 1989http://www.google.co.uk
  • 未统计 ted 条目的结果。

标签: sql ms-access ms-access-2010


【解决方案1】:

GROUP BY 的工作原理是将行放入值相同的组中。因此,当您对数据运行查询并将其按field1name 分组时,您是在说“将这些记录放入共享公共字段1 和名称值的组中”。如果您希望 4567890, ted4567890, ted† 显示在同一组中,因此计数为 2,则 field1name 必须相同。

如果名称末尾只有一两个可能的特殊字符,您可以使用 Replace()Substring() 删除名称末尾的所有特殊字符,但请记住您还必须 @ 987654330@您创建的新表达式;您不能 GROUP BY 原始名称字段,否则您将无法获得所需的计数。您还可以创建另一列,其中包含经过清理的名称,最后没有任何特殊字符。

我没有安装 Access,但应该这样做:

SELECT 
    table.[field1], 
    Replace(table.[Name], "†", "") AS Name, 
    Count(table.[Name]) AS [CountOfName]
FROM 
    table
GROUP BY 
    table.[field1], 
    Replace(table.[Name], "†", "")

【讨论】:

  • 正如我在最初的帖子中所说,我之前尝试过替换功能。删除单个字符时它似乎有效,但当我尝试解决所有三个 (†,‡,^) 时则无效。有什么建议可以替换其他人吗?
  • 您需要嵌套Replace() 语句,例如Replace(Replace(Replace(table.[Name], "†", ""), "‡", ""), "^", "")。请务必将其放入您的SELECTGROUP BY。同样,我只是徒手编写 SQL,因为我没有可用的 Access 安装,但这应该可以。根据您需要进行的替换数量,您可能需要考虑将经过清理的名称保留在另一列中并按此进行分组。
  • ahhhhh嵌套这就是我遗漏的,甚至没有知道它。哇,我只是浪费了很多时间转圈圈。感谢您的帮助。
  • @UdderlyAstray 不客气,很高兴你能够解决它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-28
  • 1970-01-01
  • 1970-01-01
  • 2016-05-22
相关资源
最近更新 更多