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
注意ELSE
和THEN
返回相同的类型。
第三个:
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]的主要内容,如果未能解决你的问题,请参考以下文章
LIKE 在 CASE 语句中 Oracle SQL (Sql Developer)