MS Access SQL查询:筛选分组内Fruit列存在多值的所有行
MS Access SQL筛选分组内存在多种Fruit取值的行
要实现筛选出Crate分组中Fruit列存在多种不同取值的所有行,可通过两种常用方法实现:
方法一:分组统计+关联查询
先通过子查询筛选出符合条件的Crate,再关联原表获取对应行数据:
SELECT t.ID, t.Crate, t.Fruit FROM YourTableName AS t INNER JOIN ( SELECT Crate FROM YourTableName GROUP BY Crate HAVING COUNT(DISTINCT Fruit) > 1 ) AS valid_crates ON t.Crate = valid_crates.Crate ORDER BY t.Crate, t.ID;
逻辑说明
- 子查询通过
GROUP BY Crate分组,用COUNT(DISTINCT Fruit)统计每个分组内不同Fruit的数量,HAVING子句筛选出数量大于1的Crate; - 将原表与子查询结果关联,仅保留这些符合条件的
Crate下的所有行。
方法二:EXISTS子查询
若部分Access版本对COUNT(DISTINCT)支持有限,可改用EXISTS子查询实现:
SELECT t.ID, t.Crate, t.Fruit FROM YourTableName AS t WHERE EXISTS ( SELECT 1 FROM YourTableName AS t2 WHERE t2.Crate = t.Crate AND t2.Fruit <> t.Fruit ) ORDER BY t.Crate, t.ID;
逻辑说明
- 对原表中的每一行,检查同一个
Crate下是否存在Fruit取值不同的其他行; - 若存在则保留当前行,最终得到所有分组内
Fruit不唯一的记录。
注意:将上述代码中的
YourTableName替换为你实际使用的表名。
内容的提问来源于stack exchange,提问作者user2059972
相关产品推荐
相关产品推荐

