MS Access SQL中CASE WHEN搭配IN子查询报语法错误如何解决
错误原因
MS Access 对标准 SQL 的CASE表达式支持度较低,且不支持在聚合查询的SELECT子句中直接嵌套IN子查询作为条件判断,这是触发语法报错的核心原因。
解决方案
推荐使用性能更优、兼容性更好的IIF+聚合函数写法,无需子查询即可实现需求:
SELECT person, MAX(score) AS maxScore, MAX(IIF(flag = 'yes', 1, 0)) AS flagYes FROM data GROUP BY person
方案说明
该写法利用聚合函数MAX的特性:只要该人员存在任意一条flag = 'yes'的记录,IIF返回的1就会成为最大值,最终flagYes为1;如果所有记录的flag都不为yes,则返回0,完全匹配需求。
如果确实需要用子查询逻辑实现,也可以改成左连接的兼容写法:
SELECT t1.person, t1.maxScore, IIF(t2.person IS NOT NULL, 1, 0) AS flagYes FROM (SELECT person, MAX(score) AS maxScore FROM data GROUP BY person) AS t1 LEFT JOIN (SELECT DISTINCT person FROM data WHERE flag = 'yes') AS t2 ON t1.person = t2.person
内容的提问来源于stack exchange,提问作者jawz101
相关产品推荐
相关产品推荐

