Oracle SQL查询报缺失关键字错误求助:CASE语句语法问题
解决你的SQL "缺失关键字" 错误
嘿,这个问题很常见——你在这里混淆了CASE表达式的两种写法!
你当前用的是简单CASE表达式的结构:
CASE salary WHEN ... THEN ...
但这种写法只能用来匹配salary等于某个特定值的情况,没办法处理像commission_pct > 0 AND commission_pct <= 0.15这样的范围/复合判断条件,这就是系统报错"缺失关键字"的核心原因。
你需要改成搜索CASE表达式,也就是去掉CASE后面紧跟的salary,直接在每个WHEN子句里写完整的判断条件。修正后的SQL如下:
SELECT employee_id, first_name, last_name, CASE WHEN (commission_pct > 0) AND (commission_pct <= 0.15) THEN salary * 20 / 100 WHEN commission_pct > 0.15 THEN salary * 25 / 100 ELSE 0 END AS INCENTIVE_AMT FROM employees ORDER BY employee_id;
关键改动说明:
- 移除了
CASE后面的salary,因为我们不需要针对salary做等于匹配,而是基于commission_pct的条件来计算奖金 - 每个
WHEN直接跟完整的布尔判断条件,这是搜索CASE表达式的标准写法,支持所有合法的SQL条件判断 - 给计算结果列加上了
AS关键字显式命名(虽然部分数据库允许省略,但显式写法更规范易读)
这样执行的话,就能正确根据commission_pct的范围计算INCENTIVE_AMT了。
内容的提问来源于stack exchange,提问作者ADITYA GUPTA
相关产品推荐
相关产品推荐

