2016-12-13 2 views
1

모니터링 플랫폼에서 실행할 수있는 비교적 간단한 쿼리를 작성하려고합니다. 이 질문의 목적을 위해 경보 조건이 충족되면 1을 반환하고 모두 양호한 경우 0을 반환하는 쿼리가 필요합니다. 여기에 내가 가지고있는 쿼리의 조각은 제대로 작동입니다 :Oracle SQL Developer Case "ORA-00937 : 단일 그룹 그룹 함수가 아닙니다"오류를 일으키는 식 중첩 된 쿼리

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과 같은 유형의 중첩 된 쿼리 케이스 표현을 수행하는 방법에 대한 제안을 매우 감사하게 생각합니다. 정수 값을 하나의 정수 결과를 반환하는 중첩 쿼리로 바꿀 경우 왜 위의 오류가 발생합니까?

미리 제안 해 주셔서 감사합니다.

+0

사례 표현, 사례 명세서가 아닙니다. – jarlh

+1

좋은 캐치; 명령문이 아닌 사례 표현으로 제목을 업데이트했습니다. –

답변

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' 
+0

와우, 이것이 내가 StackOverflow를 좋아하는 이유입니다! 나는이 문제에 대해 생각할 수있는 더 좋은 방법이 있다는 것을 알고 있었고 당신의 대답은 내가 필요로하는 것이었다! 많은 감사합니다! –