简体   繁体   中英

ORA-00936: missing expression with CASE WHEN subquery

I am getting the error ORA-00936: missing expression with the CASE WHEN statement below. possibly due to the rownum ? I have tried LIMIT 1 to no avail and also TOP 1 (but that isn't a thing in Oracle SQL)

Basically, the CASE WHEN below is to catch when the sub query returns more than one value (v_date) and just pick one of the two duplicates.

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'

You have your count and select clauses mixed up; this:

CASE WHEN COUNT(SELECT DISTINCT v_date 

should be

CASE WHEN (SELECT COUNT(DISTINCT v_date) 

Some of your aliases are reserved words, but I assume you've changed those for posting, as you'd get an ORA-00923 with exactly what is in the question.

As an aside, if your a_year field is a number then '2015' shouldn't be in quotes; similarly in your count comparison, '1 ' should just be a number, not a string.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM