MS Access 2016查询重复计数问题求助:统计唯一服务数量
解决MS Access中重复统计服务数量的问题
你的查询在LEFT JOIN后,单个服务对应多个Issue会生成重复记录,导致Count(Register.Service)把重复的服务也算入统计,所以出现服务数量虚高的情况。
最简单的修改方案
直接将统计服务数量的函数改为COUNT(DISTINCT),让它只计数每个提供商下的唯一服务:
SELECT Register.Provider, COUNT(DISTINCT Register.Service) AS CountOfService, COUNT(Issues.ID) AS [No of Issues] FROM Register LEFT JOIN Issues ON Register.Service = Issues.Service GROUP BY Register.Provider ORDER BY Register.Provider;
方案说明
COUNT(DISTINCT Register.Service):忽略JOIN后产生的重复服务记录,只统计每个提供商下不重复的服务数量,解决多Issue导致的计数错误。COUNT(Issues.ID):正常统计所有关联的Issue总数,没有对应Issue的服务会返回Null,不会被计入统计。
备选方案(子查询方式)
如果因版本问题无法使用COUNT(DISTINCT),可以拆分统计逻辑为两个子查询,分别计算服务数和Issue数后再关联:
SELECT reg.Provider, reg.CountOfService, NZ(iss.[No of Issues], 0) AS [No of Issues] FROM (SELECT Provider, COUNT(Service) AS CountOfService FROM Register GROUP BY Provider) AS reg LEFT JOIN (SELECT r.Provider, COUNT(i.ID) AS [No of Issues] FROM Register r LEFT JOIN Issues i ON r.Service = i.Service GROUP BY r.Provider) AS iss ON reg.Provider = iss.Provider ORDER BY reg.Provider;
这个方案中第一个子查询先单独统计每个提供商的服务数(天然去重),第二个子查询统计Issue总数,最后通过提供商关联结果,NZ函数确保无Issue的提供商显示0而非Null。
内容的提问来源于stack exchange,提问作者Paula Morrison
相关产品推荐
相关产品推荐

