Oracle SQL Developer Case Expression嵌套查询导致“ORA-00937:不是单组组函数”错误

时间:2016-12-13 14:16:38

标签: sql oracle11g nested case

我正在尝试构建一个可以由监控平台运行的相当直接的查询。出于这个问题的目的,如果满足警报标准,我需要我的查询返回1,如果一切正常则返回0。这是我正常工作的查询片段:

select case when count(*)<1700 
THEN '1' 
ELSE '0' 
END CASE 
FROM SomeTable 
WHERE date_value= '11-DEC-2015';

但是,我不想在比较中硬编码1700值,而是想进行嵌套查询以从同一数据库中的另一个表中提取值。当我重写这样的查询时......:

SELECT case when count(*)<(select count(*) from Another_table) 
THEN '1' 
ELSE '0' 
END CASE 
FROM SomeTable 
WHERE date_value= '11-DEC-2015';

...它在嵌套查询的开头返回以下内容:

ORA-00937:不是单组组功能 00937. 00000 - “不是单组小组的功能”

我知道可能有一种更好的方法来进行这种比较,或者也许是一些简单的我忽略但我仍然是Oracle SQL的新手,并且非常感谢有关如何做同样类型的嵌套查询案例表达式。如果我用嵌套查询替换整数值也会返回单个整数结果,为什么会出现上述错误?

提前感谢任何建议!

1 个答案:

答案 0 :(得分:1)

您最初可以从两个表中获取计数,然后使用这些值进行比较。

select case when s_count < a_count then '1' else '0' end some_col
from (select 
      (select count(*) from another_table) a_count,
      (select count(*) from sometable where date_value= '11-DEC-2015') s_count
      from dual
     ) x

另一种选择是使用count窗口函数。

select distinct
case when count(*) over() < (select count(*) from another_table) then '1' else '0' end
from sometable
where date_value= '11-DEC-2015'