0

我收到以下语句的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'
4

1 回答 1

2

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

CASE WHEN COUNT(SELECT DISTINCT v_date 

应该

CASE WHEN (SELECT COUNT(DISTINCT v_date) 

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

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

于 2015-01-16T10:05:09.193 回答