You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MS Access中如何统计指定表ID在另一表中的重复次数?

解决MS Access中公司ID出现次数统计重复的问题

看起来你遇到的问题是因为没对关联后的结果做聚合分组,或者关联方式不对,导致出现了重复的行(比如AAA多次显示)。别担心,我们可以通过正确的SQL查询来实现你想要的统计效果,包括那些在DETAILS表里没有记录的公司(比如DDD)显示0次。

问题根源

当你直接用CompanyID.ID = Details.Company做关联却没有分组时,DETAILS里的每条匹配记录都会被返回——比如AAA在DETAILS里有2条数据,结果里就会出现2行AAA,这就是你看到的重复现象。要得到每个ID的总次数,必须对结果进行聚合,同时还要确保CompanyID里的所有ID都被包含(哪怕DETAILS里没对应记录)。

解决方案1:LEFT JOIN + GROUP BY + Nz函数

这是最常用的方法,通过左连接保留所有公司ID,再分组统计次数,最后用Nz函数把NULL转为0:

SELECT 
    CompanyID.ID,
    Nz(COUNT(DETAILS.Company), 0) AS TotalCount
FROM 
    CompanyID
LEFT JOIN 
    DETAILS ON CompanyID.ID = DETAILS.Company
GROUP BY 
    CompanyID.ID
ORDER BY 
    CompanyID.ID;

代码说明:

  • LEFT JOIN:确保CompanyID表中的所有记录都被保留,不管DETAILS表中有没有对应的Company值
  • COUNT(DETAILS.Company):只统计DETAILS里匹配到的非NULL记录数,没有匹配的会返回NULL
  • Nz(..., 0):Access专属函数,把NULL值转换成0,这样DDD的TotalCount就会显示0
  • GROUP BY CompanyID.ID:将相同ID的记录分组,聚合计算总次数

解决方案2:子查询统计

如果你觉得左连接分组不太好理解,也可以用子查询单独统计每个ID的次数:

SELECT 
    c.ID,
    Nz((SELECT COUNT(*) FROM DETAILS d WHERE d.Company = c.ID), 0) AS TotalCount
FROM 
    CompanyID c
ORDER BY 
    c.ID;

代码说明:

  • 子查询(SELECT COUNT(*) FROM DETAILS d WHERE d.Company = c.ID)会针对CompanyID里的每个ID,单独计算它在DETAILS表中的出现次数
  • Nz(..., 0)同样处理没有匹配的情况,把NULL转为0
  • 这种方式不需要GROUP BY,逻辑更直观,适合对分组不太熟悉的场景

这两种方法都能得到你想要的预期结果:

IDTotalCount
AAA2
BBB4
CCC3
DDD0

内容的提问来源于stack exchange,提问作者Himanshu Jangid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 10:28:15