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
' 应该只是一个数字,而不是一个字符串。
我在下面的 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
' 应该只是一个数字,而不是一个字符串。