ORA-00936:使用CASE WHEN子查询时缺少表达式

时间:2015-01-16 09:57:41

标签: sql oracle oracle-sqldeveloper ora-00936

我收到错误ORA-00936: missing expression,其中包含以下CASE WHEN声明。可能是由于rownum?我试过LIMIT 1无效,还有TOP 1(但这不是Oracle SQL中的东西)

基本上,下面的CASE WHEN是在子查询返回多个值(v_date)时捕获,只选择两个重复项中的一个。

SELECT DISTINCT
g.v_type AS Type, 
g.f_group AS Group, 
g.v_no AS Number,
g.v_date AS Date, 
g.a_year AS Year, 
CASE WHEN COUNT(SELECT DISTINCT v_date 
                 FROM glv
                 WHERE v_type_reference = g.v_type AND v_no_reference = g.v_no AND g.com = com) = '1' 
     THEN (SELECT DISTINCT v_date 
           FROM glv
           WHERE v_type_reference = g.v_type AND v_no_reference = g.v_no AND g.com = com) 
     ELSE (SELECT v_date 
           FROM glv
           WHERE v_type_reference = g.v_type AND v_no_reference = g.v_no AND g.com = com AND rownum = 1) 
     END AS LLD
FROM glv g
WHERE g.a_year = '2015'

1 个答案:

答案 0 :(得分:2)

你的计数和选择条款混在一起;这样:

CASE WHEN COUNT(SELECT DISTINCT v_date 

应该是

CASE WHEN (SELECT COUNT(DISTINCT v_date) 

你的一些别名是保留字,但我认为你已经更改了那些用于发布的字样,因为你会得到一个ORA-00923以及问题中的确切内容。

顺便说一句,如果您的a_year字段是一个数字,那么'2015'不应该在引号中;同样在你的计数比较中,'1'应该只是一个数字,而不是一个字符串。