2014-09-30 104 views
-1

我需要回答以下问题,其内容DECODE函数的语法

enter image description here

我写了下面的代码

SELECT job_id, 
DECODE(job_id,A, 'Ad_Pres', 
B,'St_Man', 
C,'IT_PROG', 
)JOBID, GRADE 
FROM emplyee_grade; 
ORDER BY job_id 

甲骨文告诉我“失踪表达”我在做什么这里错了吗?

感谢您的帮助。

+0

要么指定一个默认值或删除最后一个逗号在解码参数 – 2014-09-30 09:01:26

+0

您的查询是错误的两种方式,语法和功能。检查我的答案。 – 2014-09-30 09:08:30

回答

3

您的查询在两个方面有误。

  1. 正如已经被其他人则建议,有语法错误,去掉最后一个逗号。

  2. 功能,你是按照这个问题做错了。问题是解码JOB_ID以显示所需的GRADEs,如图所示。

所以,正确的查询是:

SQL> WITH DATA AS(
    2 SELECT 'AD_PRES' JOB_ID FROM DUAL UNION ALL 
    3 SELECT 'ST_MAN' JOB_ID FROM DUAL UNION ALL 
    4 SELECT 'IT_PROG' JOB_ID FROM DUAL UNION ALL 
    5 SELECT 'THE REST' JOB_ID FROM DUAL) 
    6 SELECT job_id, 
    7 DECODE(JOB_ID, 'AD_PRES','A','ST_MAN','B','IT_PROG','C','THE REST','D','DEFAULT') GRADE 
    8 FROM DATA 
    9/

JOB_ID GRADE 
-------- ------- 
AD_PRES A 
ST_MAN B 
IT_PROG C 
THE REST D 

SQL> 
+1

很好解释。 – 2014-09-30 17:51:20

+0

谢谢@Patrick。我希望每个SQL问题都有一个测试用例,以减少逆向工程师的时间和精力,说什么? – 2014-09-30 17:58:23

+0

是的,那很好。 – 2014-09-30 18:05:48

3
DECODE(job_id,'A', 'Ad_Pres', 
'B','St_Man', 
'C','IT_PROG', <-- take this comma away 
) 

拿走额外的逗号,我相信A,B,C需要用单引号。

+0

谢谢@ dcp,但后来我得到无效的字符错误 – Marilee 2014-09-30 09:00:19

+0

@Marilee - 好的,看最新的编辑。 – dcp 2014-09-30 09:01:36

+0

@Marilee删除命令之前的最后一个分号 – 2014-09-30 09:02:17