首页 > 解决方案 > 当我们在语句中使用联接时,在选择语句中使用案例表达式时出错

问题描述

此代码不起作用并显示错误“未在预期的位置找到来自关键字”

select m.marks,
CASE 
WHEN m.marks<65 then 'F' 
WHEN m.marks>65 then 'P' 
END m.grade 
from student s INNER JOIN marks m ON s.id=m.id;

但这有效

select marks, 
CASE 
WHEN marks<65 then 'F' 
WHEN marks>65 then 'P' 
END grade 
from marks

标签: sqloraclecasecolumn-alias

解决方案


m是表的别名,marks您在引用该表中的列时使用它。您将其应用于列别名:

END m.grade 

它不属于的地方,所以 - 只在那个地方 - 删除m.

select m.marks,
CASE 
WHEN m.marks<65 then 'F' 
WHEN m.marks>65 then 'P' 
END grade 
from student s INNER JOIN marks m ON s.id=m.id;

正如@Gordon 在评论中指出的那样,您正在检查 >65 和 <65,因此正好65 的学生将不会获得 F 或 P - 他们的成绩将为空。你可能想要:

WHEN m.marks < 65 then 'F' 
WHEN m.marks >= 65 then 'P' 

或者

WHEN m.marks >= 65 then 'P' 
ELSE 'F' 

...虽然如果marks为 null,第二个版本也将其视为 F,而第一个版本仍将返回 null。


推荐阅读