sql - ms access sql - 在选择子查询中选择案例
问题描述
我有一张每人多行的表格,如果标志是肯定的,则需要每人获得一行和最大分数,以及其他内容(这只是本示例的列的片段)
数据表
人 | qtime | 旗帜 | 分数 |
---|---|---|---|
鲍勃 | 第一季度 | 4 | |
鲍勃 | 季度2 | 不 | 6 |
鲍勃 | 第四季度 | 不 | 3 |
爱丽丝 | 第一季度 | 不 | 4 |
爱丽丝 | 季度2 | 是的 | 7 |
爱丽丝 | 第 3 季 | 是的 | 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
推荐阅读
- python - Numpy数组更改列表元素
- async-await - Resharper 建议将 Using 语句转换为单个“等待使用”?
- python - 陷入潜在的无限循环
- c# - 单元测试自定义 AuthenticationHandler 中间件
- sql - Oracle - 下一行的顺序由前一行确定
- javascript - 如何让这个 javascript 以随机顺序显示图像?
- python - 如何解决“'int' 类型的 TypeError 参数不可迭代。”
- c++ - 如何使用 Chrono 或 ctime libaray 输入设定的开始和结束时间
- python - 如果满足某个条件,如何防止某行以下的行在python中运行?
- javascript - 对于这样的数据库,间隔可以吗?