2014-02-14 7 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 и сделать свои инструкции «когда» более подробно.

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

Я принял ваши предложения, чтобы добавить более подробные сведения к выражению case и удалить условие в предложении where. выберите имя_компьютера, сумма (case program_code = 'F' и status_cd = 'AC', затем 1 else 0 end) как F, sum (case program_code = 'FS' и status_cd = 'AC', затем 1 else 0 end) как FS , sum (case possible_ind = 'Y' и date_attended не равно null, а status_cd = 'PN', а затем 1 else 0 end) как NEW из группы table 1 с именем manager_name, имеющим сумму (случай, когда program_code = 'F' и status_cd = 'AC' затем 1 еще 0 конец)> 1 – user1466935

+0

А, я не знал, что они были той же колонкой. Рад, что вы его работали. – Sanders

Смежные вопросы