2014-11-20 4 views
0

У меня есть две таблицы с информацией о сотруднике в people_table и одна с телефоном. этих сотрудников. Теперь в phone_table может быть несколько записей для конкретного сотрудника с различными типами, например W1 -> Work, M -> Mobile, H1 -> Home. Теперь я хочу запросить запрос, чтобы, если W1 включен, то другого типа телефона не следует выбирать. Если W1 не включен, тогда M нужно проверить, а запрос должен отображать номер мобильного телефона (так далее и т. Д.), Поэтому в основном я должен использовать if и else в select statement. Я не могу написать функцию для этого согласно требованию.if and else in select query in sql

Я попытался использовать случай и когда нравится следующим образом: -

select emp_num, emp_name,ph_no,ph_type, 
case 
    when ph_type='W1' 
then ph_no 
    when ph_type='M' 
then ph_no 

from people_table pt ,phone_table ppt 
where pt.person_id=ppt.person_id 

Но это также возвращение тот же результат. то есть если wmployee имеет w1 нет. и M no. он вернет оба ... но он должен получить W1 no. только и не M

ответ

4

Это звучит, как вам нужно, чтобы присоединиться к отфильтрованному набору таблицы телефона дважды:

select 
    emp_num, 
    emp_name, 
    ph_no, 
    COALESCE(ppt_w.ph_type,ppt_m.ph_type) ph_type, 
    COALESCE(ppt_w.ph_no,ppt_m.ph_no) ph_no 
from people_table pt 
LEFT JOIN phone_table ppt_w 
    ON pt.person_id=ppt_w.person_id 
    AND ppt_w.ph_type='W1' 
LEFT JOIN phone_table ppt_m 
    ON pt.person_id=ppt_m.person_id 
    AND ppt_m.ph_type='M' 
1

Вы можете сделать левое присоединяется, чтобы получить телефонные номера, и coalesce получить первый телефон число, которое существует:

select 
    p.emp_num, 
    p.emp_name, 
    coalesce(w1.ph_no, m.ph_no, h1.ph_no) as ph_no, 
    coalesce(w1.ph_type, m.ph_type, h1.ph_type) as ph_type 
from 
    people_table p 
    left join phone_table w1 on w1.person_id = p.person_id and w1.ph_type = '' 
    left join phone_table m on m.person_id = p.person_id and m.ph_type = '' 
    left join phone_table h1 on h1.person_id = p.person_id and h1.ph_type = ''