如何在MS Access中筛选关联索赔均非Selected状态的Open案件
适用于MS Access的查询语句
可以通过排除存在"Selected"索赔的案件来实现需求,以下是两种可行的SQL写法:
方法一:使用NOT EXISTS子查询
SELECT t2.* FROM table2 t2 INNER JOIN table1 t1 ON t2.[案件号] = t1.[案件号] WHERE t1.[Case Status] = 'Open' AND NOT EXISTS ( SELECT 1 FROM table2 t2_sub WHERE t2_sub.[案件号] = t1.[案件号] AND t2_sub.[Claim Status] = 'Selected' );
逻辑说明
- 用
INNER JOIN关联案件表(table1)和索赔表(table2),确保只处理table1中存在的案件 - 筛选出table1里
Case Status为Open的案件 - 通过
NOT EXISTS子查询排除那些在table2中存在至少一条"Selected"状态索赔的案件,剩下的就是所有索赔都非"Selected"的Open案件,最终返回这些案件的全部索赔记录
方法二:使用GROUP BY和HAVING子句先筛选符合条件的案件
SELECT t2.* FROM table2 t2 INNER JOIN ( SELECT t1.[案件号] FROM table1 t1 INNER JOIN table2 t2_sub ON t1.[案件号] = t2_sub.[案件号] WHERE t1.[Case Status] = 'Open' GROUP BY t1.[案件号] HAVING SUM(IIF(t2_sub.[Claim Status] = 'Selected', 1, 0)) = 0 ) qualified_cases ON t2.[案件号] = qualified_cases.[案件号];
逻辑说明
- 子查询
qualified_cases先找出所有符合条件的案件:- 关联table1和table2,筛选Open状态的案件
- 按案件号分组,用
SUM(IIF(...))统计每个案件中"Selected"索赔的数量,数量为0的就是所有索赔都非"Selected"的案件
- 再将table2和这些合格案件关联,返回对应的索赔记录
两种方法都能满足需求,小数据量下效率差异不大,大数据量时NOT EXISTS通常更高效。
内容的提问来源于stack exchange,提问作者Jessica G
相关产品推荐
相关产品推荐

