CASE 语句 [Oracle/SQL]

Posted

技术标签:

【中文标题】CASE 语句 [Oracle/SQL]【英文标题】:CASE Statements [Oracle/SQL] 【发布时间】:2014-11-19 21:18:43 【问题描述】:

我已经创建了几个 CASE 语句,其中没有一个工作,有所有不同的错误。我目前花了过去几个小时试图弄清楚它们,但根本无法得到它们。如果有人能解释我在每个方面做错了什么,那就太好了。

SELECT FIRST_NAME, LAST_NAME, to_number(MANAGER_ID, '9999'), COMMISSION_PCT,
CASE 
WHEN '"MANAGER_ID" > 0' THEN MANAGER_ID
ELSE '9999'
END AS"Review"
FROM EMPLOYEES
WHERE DEPARTMENT_ID BETWEEN 80 AND 90

使用此代码,我应该创建一个新列“评论”并输入以下信息: 如果他们有经理 ID,则会显示 如果他们没有经理 ID,则会显示 Commission_pct 如果他们没有佣金,则会显示“9999”

[在写这篇文章时,我注意到我从来没有任何关于 Commission_Pct 的命令,但我假设这甚至不会解决这个问题。]

我的下一个问题是

Select NAME, START_DATE, to_char(END_DATE, 'DD/MON/YYYY'),
CASE END_DATE
       WHEN '30/Sep/2004' THEN 'End in 2 weeks' 
       ELSE SYSDATE
END AS "PROMOTIONS"
FROM f_promotional_menus

使用此代码,有点奇怪,但这是它的要求。 如果有结束日期,暂时用“两周后结束”代替。如果没有结束日期,请将其替换为今天的日期。

我的最后一期

SELECT LAST_NAME, to_number(DEPARTMENT_ID, '99999), to_number(SALARY, '9999999.99'),
CASE DEPARTMENT_ID
WHEN '10' THEN '1.25*"SALARY"'
WHEN '90' THEN '1.5*"SALARY"'
WHEN '130' THEN '1.75*"SALARY"'
ELSE SALARY
END AS "NEW_SALARY"
FROM EMPLOYEES;

再次,一个新列的要求是- 如果部门 id 是 10 那么 1.25 * 工资 如果部门 id 是 90 则 1.5 * 工资 如果部门 id 是 130 那么 1.75 * 工资 否则,显示旧工资。

如果有人对我哪里出错有最模糊的想法,并且有关于修复它的建议,那将不胜感激。 谢谢!

【问题讨论】:

Stack Overflow 的工作方式是:一次问一个问题。拜托,你能把你的三个问题分成三个不同的 Stack Overflow 问题 【参考方案1】:

这很有趣。您已经发现了几种不同的混淆方式。

第一个:

CASE WHEN '"MANAGER_ID" > 0' THEN MANAGER_ID
     ELSE '9999'
 END AS "Review"

好吧,你有不想要的单引号。其实你可以去掉所有的引号,假设Manager_Id是一个数字:

CASE WHEN MANAGER_ID > 0 THEN MANAGER_ID
     ELSE 9999
 END AS Review

第二个:

CASE END_DATE
       WHEN '30/Sep/2004' THEN 'End in 2 weeks' 
       ELSE SYSDATE
END AS "PROMOTIONS"

这是一个日期格式问题。我推荐DATE关键字后跟'YYYY-MM-DD'

CASE END_DATE
       WHEN DATE '2004-09-30' THEN 'End in 2 weeks' 
       ELSE TO_CHAR(SYSDATE, 'YYYY-MM-DD')
END AS PROMOTIONS

注意ELSETHEN 返回相同的类型。

第三个:

CASE DEPARTMENT_ID
    WHEN '10' THEN '1.25*"SALARY"'
    WHEN '90' THEN '1.5*"SALARY"'
    WHEN '130' THEN '1.75*"SALARY"'
    ELSE SALARY
END AS "NEW_SALARY"

也是一个引用问题。假设DEPARTMENT_ID 是一个数字,您可以删除所有引号:

CASE DEPARTMENT_ID
    WHEN 10 THEN 1.25 * SALARY
    WHEN 90 THEN 1.5 * SALARY
    WHEN 130 THEN 1.75 * SALARY
    ELSE SALARY
END AS NEW_SALARY

如果DEPARTMENT_ID 是一个字符串,那么您应该在WHEN 值上加上引号。

【讨论】:

以上是关于CASE 语句 [Oracle/SQL]的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE SQL CASE 语句 - 出现错误

LIKE 在 CASE 语句中 Oracle SQL (Sql Developer)

在 Case 语句中使用计算 - Oracle SQL

Oracle SQL ORA-00907: CASE 语句中缺少右括号错误

Oracle SQL - 带有迭代的 Case 语句

Oracle SQL的Where子句中如何写case语句?