Access查询中如何按分组判断字段值是否全部为True
Access分组检查字段全为True的高效解决方案
DLookup逐行调用查询的机制会导致数据量大时性能急剧下降,以下两种方案能从根本上解决速度问题:
方案一:预聚合分组关联(性能最优)
先一次性完成分组统计,再和原表关联,避免重复计算:
- 创建聚合查询(命名为
qry_GroupCheck):
SELECT First, IIF(Min(Second) = -1, True, False) AS AllTrue FROM YourTableName GROUP BY First;
Access中布尔值以
-1(True)和0(False)存储,Min(Second)若为-1则说明该分组所有Second值都是True,否则存在False。
- 关联原表与聚合查询生成最终结果:
SELECT t.*, q.AllTrue AS Third FROM YourTableName t INNER JOIN qry_GroupCheck q ON t.First = q.First;
方案二:关联子查询(无需额外建查询)
直接在主查询中嵌入子查询,判断当前分组是否存在非True值:
SELECT t.*, IIF(NOT EXISTS(SELECT 1 FROM YourTableName t2 WHERE t2.First = t.First AND t2.Second = False), True, False) AS Third FROM YourTableName t;
子查询检查当前
First分组下是否有Second为False的记录,没有则返回True,否则返回False。
优化注意事项
- 给
First字段建立索引,能大幅提升关联或子查询的匹配速度 - 若
Second字段允许空值,需修改子查询条件为t2.Second <> True,此时空值或False都会让Third显示False
内容的提问来源于stack exchange,提问作者Ashraf Fouad
相关产品推荐
相关产品推荐

