2013-05-23 4 views
0

CASE WHEN 문을 사용하여 하나의 SQL 문에 두 개의 집계 함수 (COUNT, SUM)를 사용하고 싶습니다. 내 코드는 다음과 같다 :다른 기준을 가진 두 개의 집계 함수

CASE 
     WHEN ( ( ( ( (CSSC_MASTER_VIEW.ORDER_TYPE = 'OR') 
          OR (OCSSC_MASTER_VIEW.ORDER_TYPE = 'KB')) 
         OR (CSSC_MASTER_VIEW.ORDER_TYPE = 'KE')) 
        OR (CSSC_MASTER_VIEW.ORDER_TYPE = 'OR-TAT')) 
       OR (CSSC_MASTER_VIEW.ORDER_TYPE = 'QT-TAT')) 
      OR (CSSC_MASTER_VIEW.ORDER_TYPE = 'QT') 
     THEN 
     COUNT((CSSC_MASTER_VIEW.ORDER_LINE_NUMBER)) 

     ELSE 
     SUM((CSSC_MASTER_VIEW.ORDER_LINE_NUMBER)) 
    END 
     AS Lines_processed 

이 코드는 "오라클 데이터베이스 오류 : ORA-00900를 : 유효하지 않은 SQL 문"오류를 제공

어떤 일이 나를 도울 수 있습니까?

+1

귀하를 돕기 위해 완전한 진술이 필요합니다. 왜 그렇게 많은 괄호를 사용합니까? 코드를 읽기/디버그하기 위해 고의적으로 노력합니까? –

+1

두 개의 개별 집계로 나누어야한다고 생각합니다. 현재로서는 단일 출력에서 ​​두 개의 값을 지정할 수 있습니다. 반환 할 데이터베이스는 무엇입니까? SUM 또는 COUNT입니까? 그것은 말할 수 없다. 어느 쪽도 할 수 없다. –

+0

Jonathan이 지적하고있다. 집계중인 것으로 보이지만 하나의 사례와 일치하는 일부 행과 다른 사례와 일치하는 일부 행이있을 수 있습니다. 그러면 무엇을해야합니까? 백작님 또는 합계? –

답변

2

CASE WHEN (CSSC_MASTER_VIEW.ORDER_TYPE IN ('OR', 'KB', 'KE', 'OR-TAT', 'QT-TAT', 'QT')) 
    THEN COUNT(CSSC_MASTER_VIEW.ORDER_LINE_NUMBER) 
    ELSE SUM(CSSC_MASTER_VIEW.ORDER_LINE_NUMBER) 
END 
AS Lines_processed 

작동합니다

((CSSC_MASTER_VIEW.ORDER_LINE_NUMBER)) 

SUM((CSSC_MASTER_VIEW.ORDER_LINE_NUMBER)) 

오와

에서) (이중를 제거 너무

+0

감사하지만 "Oracle Database Error : ORA-00937 : 단일 그룹 그룹 기능이 아닙니다"라는 또 다른 오류가 발생했습니다. 내가 여기서 뭐 잘못하고 있니? – santhosha

+0

당신은 아마도 절에 의한 그룹이 누락되었을 것입니다. –

+0

네 말이 맞습니다. 이제 작동합니다. 고마워. – santhosha

0

그것은 당신이 표현을 중첩하는 방법처럼 보인다 WHEN 절은 ' 너를 죽이고있어. 해당 진술에있는 모든 괄호를 없애보십시오.

편집 : 또는 더 나은 아직 vc 74와 같은 IN 문을 사용하십시오.