Oracle SQL:CASE WHEN

时间:2016-02-23 18:18:52

标签: sql oracle case ora-00923

我尝试编写一个查询代码,该查询将显示以开发人员('%_PROG')或经理('%_MAN')身份工作的员工。我的查询很好,除了CASE WHEN THEN的第二行。我收到错误消息:

  

在预期的

中未找到ORA-00923 FROM关键字

所以问题必须在第二行,即:

(CASE WHEN JOB_ID LIKE '%_PROG' THEN "Developer" ELSE "Manager" END) JOB_ID

以下是整个查询:

SELECT 'Employee# ' || EMPLOYEE_ID 
       || ' named ' || FIRST_NAME
       || ' ' || LAST_NAME || ' who is ' 
       || CASE WHEN JOB_ID LIKE '%_PROG' THEN "Developer" ELSE "Manager" END 
       || ' will have a new salary of $'
       || ROUND((SALARY  +((SALARY/100)*25)),-2) AS "Employees with higher salary"
  FROM EMPLOYEES 
 WHERE JOB_ID LIKE '%_PROG' OR JOB_ID LIKE '%_MAN'
   AND (SALARY >= 3000 AND SALARY <= 5000)
 ORDER BY EMPLOYEE_ID;

输出应如下所示:

 Employee# 103 named Anna Clark who is Developer will have a new salary of  $006,100

我做错了什么?

2 个答案:

答案 0 :(得分:0)

如果你的意思是列,&#34;开发人员&#34;和&#34;经理&#34;好的如果您的意思是字符串,请将它们用单引号括起来。

您没有创建列,而是将CASE表达式与其他表达式连接在一起,因此请将JOB_ID放在最初用作列别名的位置之后。 (正如我现在看到的,你已经编辑过了)

答案 1 :(得分:0)

尝试在我们的声明中使用单引号: (CASE WHEN JOB_ID LIKE '%_PROG' THEN 'Developer' ELSE 'Manager' END) JOB_ID