SELECT
CONCAT(CONCAT(FIRST_NAME, ' '), LAST_NAME) AS "Fn and Ln",
JOB_ID AS "Job_title",
CASE COMMISSION_PCT
WHEN NULL THEN SALARY
WHEN '-' THEN SALARY
ELSE (COMISSION_PCT * SALARY) * 12
END AS "Year income"
FROM HR.EMPLOYEES
我必须找到考虑保险费的员工的年收入。如果没有保险费,我必须忽略它。在我的代码中,我得到“ORA-00904:“承诺_PCT”:标识符无效,我不知道是什么原因。COMISSION_PCT NUMBER(2,2)的数据类型和SALARY的数据类型是NUMBER(8,2)。
说明:指定每个员工的年收入金额,假设奖金以百分比表示
2条答案
按热度按时间n3ipq98p1#
你的语法有点不对。
请尝试以下
CASE
语句:dkqlctbz2#
直接的问题是您有一个错字;当列名为
COMMISSION_PCT
且带有两个Ms时,错误会告诉您您引用的是COMISSION_PCT
。然后,您的case表达式将与字符串文字
'-'
进行比较,但由于该列是数字,因此任何行都不能具有该值,因此您将得到“ORA-00932:不一致的数据类型:获得CHAR”应为NUMBER您客户端似乎将空值显示为短划线,因此您不需要处理这些值尽管这种形式的case表达式是有效的-there are two forms-但在这种情况下,您需要一个 searched 表达式(如@Vvdl所言!),因为简单的表达式不能与null进行比较(因为没有任何东西等于或不等于null):
如果
salary
是monthly,那么在这两种情况下,你都需要乘以12,或者在最后乘以12:fiddle