2014-11-20 98 views
0

我有兩張表,一張在employee_table中有員工信息 ,另一個是電話號碼。這些員工。現在,phone_table可以爲具有不同類型的特定員工設置多個條目,如W1 - >工作,M - >移動,H1 - >家庭。 現在我想要查詢,如果W1被發現,那麼就不應該提取其他電話類型。如果不是W1,那麼應該檢查M並且查詢應該取得手機號碼(等等等等),所以基本上我必須在select語句中使用if和else。按照要求我無法爲此寫一個函數。if和else在sql中的select查詢

我嘗試使用案例和喜歡的時候如下: -

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 

但這也返回相同的輸出。也就是說,如果員工有w1沒有。和M no。它會返回兩個..但它應該取W1無。僅過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

你可以做左聯接拿到電話號碼,並​​3210拿到的第一個電話存在的編號:

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 = ''