2014-02-14 2 views
0

관리자 이름으로 그룹화 된 program_code 필드를 기반으로 활성 참가자 수를 계산하고 싶습니다. 그러나 세 가지 조건이 충족되어야하는 동일한 쿼리에서 다른 것의 개수를 원합니다.여러 조건이 포함 된 사례 명세서

select manager_name, 
     sum (case program_code when 'F' then 1 else 0 end) as F, 
     sum (case program_code 
       when 'FS' then 1 
       else 0 
      end) 
    from table1 
where status='AC' 
group by manager_name 

는 그러나 나는이 possible_ind='Y' AND date_attended is not null AND status_cd='P'

나는 모든 조건을 가진 case 성명에서 그것을 넣을 수있는 모든 참가자의 세 번째 수를 원한다. 내가 할 수있는 방법이 있니? select 절에 하위 쿼리가 있어야하나요? select 절에서 하위 쿼리로 시도했지만 manager_name으로 그룹화하지 않습니다.

select manager_name, 
     sum (program_code when 'F' then 1 else 0 end) as F, 
     sum (case program_code 
       when 'FS' then 1 
       else 0 end), 
      (select count(*) 
       from table1 
      where possible_ind='Y' 
       and date_attended is not null 
       and status_cd='P') as NEW 
    from table1 
where status='AC' 
group by manager_name 
+0

'status'와'status_cd'는 서로 다른 두 열입니까? – peterm

답변

0

case 문에서 표현식을 생략하고 "when"문을 더 자세히 만들 수 있습니다.

select manager_name, 
sum (program_code when 'F' then 1 else 0 end) as F, 
sum (case program_code 
    when 'FS' then 1 
    else 0 end), 
sum (case 
    when possible_ind='Y' 
     and date_attended is not null 
     and status_cd='P' then 1 else 0 end) as NEW 
from table1 
where status='AC' 
group by manager_name 

자세한 내용은 Oracle's example을 참조하십시오.

+0

where 절에서 상태가 'AC'이므로 세 번째 사례 표현에서 P가되도록 상태가 필요하기 때문에 작동하지 않습니다. – user1466935

+0

사례 식에 세부 정보를 추가하고 조건을 제거하기 위해 제안을 받았습니다. where 절에서. F로 합계 (사례 program_code = 'FS'및 status_cd = 'AC', 그 다음 1 else 0 end)를 FS로 선택하여 manager_name, sum (사례 program_code = 'F'및 status_cd = 'AC' (program_code = 'F'및 status_cd = 'AC'인 경우) 합계 (case possible_ind = 'Y'및 date_attended는 null이 아니며 status_cd = 'PN'다음 1 else 0 end) 그 다음 1 else 0 end)> 1 – user1466935

+0

아, 나는 그들이 같은 칼럼인지 몰랐다. 다행 이군. – Sanders