oracle 尝试相乘时标识符无效

scyqe7ek  于 2022-11-03  发布在  Oracle
关注(0)|答案(2)|浏览(182)
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)。
说明:指定每个员工的年收入金额,假设奖金以百分比表示

n3ipq98p

n3ipq98p1#

你的语法有点不对。
请尝试以下CASE语句:

CASE 
  WHEN COMMISSION_PCT IS NULL THEN SALARY 
  WHEN COMMISSION_PCT = '-' THEN SALARY
  ELSE (COMMISSION_PCT * SALARY) 
END * 12 AS "Year income"
dkqlctbz

dkqlctbz2#

直接的问题是您有一个错字;当列名为COMMISSION_PCT且带有两个Ms时,错误会告诉您您引用的是COMISSION_PCT

ELSE (COMMISSION_PCT * SALARY) * 12

然后,您的case表达式将与字符串文字'-'进行比较,但由于该列是数字,因此任何行都不能具有该值,因此您将得到“ORA-00932:不一致的数据类型:获得CHAR”应为NUMBER您客户端似乎将空值显示为短划线,因此您不需要处理这些值

CASE COMMISSION_PCT 
        WHEN NULL THEN SALARY
        ELSE (COMMISSION_PCT * SALARY) * 12
    END AS "Year income"

尽管这种形式的case表达式是有效的-there are two forms-但在这种情况下,您需要一个 searched 表达式(如@Vvdl所言!),因为简单的表达式不能与null进行比较(因为没有任何东西等于或不等于null):

CASE
        WHEN COMMISSION_PCT IS NULL THEN SALARY
        ELSE (COMMISSION_PCT * SALARY) * 12
    END AS "Year income"

如果salary是monthly,那么在这两种情况下,你都需要乘以12,或者在最后乘以12:

CASE
        WHEN COMMISSION_PCT IS NULL THEN SALARY
        ELSE (COMMISSION_PCT * SALARY)
    END * 12 AS "Year income"

fiddle

相关问题