案例语句[Oracle/SQL]
我已经创建了几个CASE语句,它们都不起作用,都有不同的错误。我最近花了几个小时想弄明白,但就是弄不明白。如果有人能解释我在每一个方面做错了什么,那就太好了案例语句[Oracle/SQL],sql,database,oracle,case,Sql,Database,Oracle,Case,我已经创建了几个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 WHE
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
使用此代码,我应该创建一个新的列“Review”,并输入以下信息:
如果他们有管理者id,则会显示该id
如果他们没有经理id,则会显示佣金pct
如果他们没有佣金,则显示“9999”
[在写这篇文章时,我注意到我从来没有任何关于佣金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*工资
否则,显示旧的薪资
如果有人对我哪里出了问题有最模糊的想法,并提出了解决问题的建议,我们将不胜感激。
谢谢 这很有趣。您发现了几种不同的混淆方式 第一:
CASE WHEN '"MANAGER_ID" > 0' THEN MANAGER_ID
ELSE '9999'
END AS "Review"
好吧,你不需要单引号。事实上,您可以删除所有引号,前提是Manager\u 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"
这是一个日期格式问题。我建议使用日期
关键字,后跟'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\u 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\u ID
是一个字符串,那么当值时,应该在上有引号。这很有趣。您发现了几种不同的混淆方式
第一:
CASE WHEN '"MANAGER_ID" > 0' THEN MANAGER_ID
ELSE '9999'
END AS "Review"
好吧,你不需要单引号。事实上,您可以删除所有引号,前提是Manager\u 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"
这是一个日期格式问题。我建议使用日期
关键字,后跟'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\u 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\u ID
是一个字符串,那么在WHEN
value上应该有引号。堆栈溢出的工作方式是:一次只问一个问题。请问,你能把你的三个问题分成三个不同的堆栈溢出问题吗堆栈溢出的工作方式是:你一次只问一个问题。拜托,你能把你的三个问题分成三个不同的问题吗