MS Access统计结果为0时无记录显示问题求助
问题分析与解决方案
原SQL的核心问题是:GROUP BY Date, Login, SLA只会返回表中实际存在的分组,如果某个(Date, Login, SLA)组合没有对应数据,这个分组根本不会出现在结果集里,Nz(Count(SLA))只是对已有分组的统计值做null处理,无法生成不存在的分组。
要解决这个问题,需要先构造出所有可能的(Date, Login, SLA)组合,再通过左连接原表来统计,确保每个组合都能返回结果(包括统计数为0的情况)。
解决SQL语句
SELECT dims.Date, dims.Login, sla_vals.SLA, Nz(Count(t.SLA), 0) AS SLA_Count FROM (SELECT DISTINCT Date, Login FROM t_source_org_frt) AS dims, (SELECT 0 AS SLA UNION SELECT 1 AS SLA) AS sla_vals LEFT JOIN t_source_org_frt AS t ON dims.Date = t.Date AND dims.Login = t.Login AND sla_vals.SLA = t.SLA GROUP BY dims.Date, dims.Login, sla_vals.SLA;
语句说明
构造维度组合:
(SELECT DISTINCT Date, Login FROM t_source_org_frt)获取表中所有唯一的日期和登录账号组合(SELECT 0 AS SLA UNION SELECT 1 AS SLA)生成SLA的所有可能取值(0和1)- 两者交叉连接得到所有需要统计的
(Date, Login, SLA)组合
左连接统计:
- 左连接原表到维度组合表,确保每个组合都被保留
- 用
Count(t.SLA)统计匹配的记录数,没有匹配时会返回null Nz(..., 0)将null转换为0,得到统计数为0的结果
内容的提问来源于stack exchange,提问作者Vclav Broek Polerok
相关产品推荐
相关产品推荐

