问题描述
我有一个每人多行的表格,如果标志为是,则需要获得每人一行和最大分数,以及其他内容(这只是此示例的列的片段)
数据表
人 | qtime | 标志 | 得分 |
---|---|---|---|
鲍勃 | 第一季度 | 4 | |
鲍勃 | 第二季度 | 没有 | 6 |
鲍勃 | 第四季度 | 没有 | 3 |
爱丽丝 | 第一季度 | 没有 | 4 |
爱丽丝 | 第二季度 | 是的 | 7 |
爱丽丝 | 第三季度 | 是的 | 9 |
select
person,max(score) as maxscore,case
when person in (select person from data where flag = 'yes')
then 1
else 0
end as flagYes
from
data
group by
person
这在 Microsoft sql 服务器中可以正常工作,但在 MS Access sql 中我得到
我可以在子查询中使用别名,如果这会让事情感觉不会引起问题,但它们不会使查询摆脱这个错误。
解决方法
MS Access 不支持 case
表达式。您可以改用 IIF()
:
select d.person,max(d.score) as maxScore,iif(d.person in (select d2.person from data as d2 where d2.flag = 'yes'),1,0) as flagYes
from data as d
group by person