2015-11-04 55 views
0

在Oracle中,下面的case语句给我一个错误。请帮忙。错误是:ORA:00907。在我写案例声明时出现错误ORA:00907

select * from schools_master_table where TEST_SUBJECT_KEY in (case 
when SCHOOL_YEAR<=2014 and TEST_GRADE_KEY in (3,4,5,6,7,8,10) THEN (1,2,3,4,5) 
when SCHOOL_YEAR >2014 and TEST_GRADE_KEY in (10) THEN (1,3) 
when SCHOOL_YEAR>2014 and TEST_GRADE_KEY in (3,4,5,6,7,8) THEN (1,2,3,4,5) 
when SCHOOL_YEAR>2014 and TEST_TYPE_KEY in (11) THEN (17,18,19,20,21,22,23,24,25) 
ELSE NULL 
END) 
+0

我试图写一个case语句,如果条件1是在其中满足then test_subject_key是(1,2,3,4,5)否则条件2或条件3等等。 –

+0

编辑您的原始文章,并添加上面的评论,以便它更相关。还要添加更多标签,例如oracle,sql等以获得更多人的帮助 – AGE

+0

这仅仅是无效的[case expression syntax](http://docs.oracle.com/cd/E11882_01/server.112/e41084 /expressions004.htm),或者为'in'条件提供一个有效的列表。作为案例的结果,您不能拥有值列表(除非您使用集合)。你的任务是否要求你使用一个案例,如果是,它指定了什么?否则,这应该用'或'和'和'运算符和si ole条件来完成,而不是case ... –

回答

0

case expression syntax允许返回表达式和其他表达式。这里重要的是需要an expression,“......评估为一个值”。您试图返回an expression list,而这在案例结构中无效。你可以看到一个简单的例子:

select case when 1=1 then (1,2) end from dual; 

这也得到ORA-00907:missing right parenthesis和错误标记为在逗号 - 因为它希望看到从一组围绕一个表现,而不是一个右括号名单。

你可以只使用ORAND组合代替,检查,对当其他条件匹配相应的列表中TEST_KEY_SUBJECT值:

select * from schools_master_table 
where (SCHOOL_YEAR<=2014 and TEST_GRADE_KEY in (3,4,5,6,7,8,10) 
    and TEST_SUBJECT_KEY in (1,2,3,4,5)) 
or (SCHOOL_YEAR>2014 and TEST_GRADE_KEY in (10) 
    and TEST_SUBJECT_KEY in (1,3)) 
or (SCHOOL_YEAR>2014 and TEST_GRADE_KEY in (3,4,5,6,7,8) 
    and TEST_SUBJECT_KEY in (1,2,3,4,5)) 
or (SCHOOL_YEAR>2014 and TEST_TYPE_KEY in (11) 
    and TEST_SUBJECT_KEY in (17,18,19,20,21,22,23,24,25)) 
+0

Alex,非常感谢你。不知道我为什么对使用案件感到厌烦。欣赏它! –