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

ORA-00936: missing expression with CASE WHEN subquery

我在下面的 CASE WHEN 语句中收到错误 ORA-00936: missing expression。可能是因为 rownum?我已经尝试 LIMIT 1 无济于事,而且 TOP 1 (但这在 Oracle SQL 中不是问题)

基本上,下面的CASE WHEN是在子查询returns超过一个值(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'

您的计数和 select 子句混淆了;这个:

CASE WHEN COUNT(SELECT DISTINCT v_date 

应该是

CASE WHEN (SELECT COUNT(DISTINCT v_date) 

您的一些别名是保留字,但我假设您已经更改了这些别名以便发布,因为您会得到一个 ORA-00923,其中包含问题中的内容。

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