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.