Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
案例语句[Oracle/SQL]_Sql_Database_Oracle_Case - Fatal编程技术网

案例语句[Oracle/SQL]

案例语句[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

我已经创建了几个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
使用此代码,我应该创建一个新的列“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上应该有引号。

堆栈溢出的工作方式是:一次只问一个问题。请问,你能把你的三个问题分成三个不同的堆栈溢出问题吗堆栈溢出的工作方式是:你一次只问一个问题。拜托,你能把你的三个问题分成三个不同的问题吗