2013-09-25 67 views
1

中的值更改連接上的條件我有一個名爲Member_Id的表,該表中有一個名爲Member_ID_Type的列。下面的select語句返回來自同一個表的另一列id_value的值。 select語句中的表上的連接位於通用標識列上。該表中可能有多個條目具有相同的通用標識。SQL:想要根據表

我想調整select語句,以便它將返回具有member_id_type等於'7'的條目的id_values。但是,如果這是空的,那麼我想返回member_id_type等於'1'的記錄。

因此,以前我有一個連接條件(註釋如下),但只返回了member_id_type等於'7'否則返回null。

我想我可能要在這裏使用一個case語句,但我不是100%確定如何在這種情況下使用它

SELECT TOP 1 cm.Contact_Relation_Gid, 
       mc.Universal_ID, 
       mi.ID_Value, 
       cm.First_Name, 
       cm.Last_Name, 
       cm.Middle_Name, 
       cm.Name_Suffix, 
       cm.Email_Address, 
       cm.Disability_Type_PKID, 
       cm.Race_Type_PKID, 
       cm.Citizenship_Type_PKID, 
       cm.Marital_Status_Type_PKID, 
       cm.Actual_SSN, 
       cm.Birth_Date, 
       cm.Gender, 
       mc.Person_Code, 
       mc.Relationship_Code, 
       mc.Member_Coverage_PKID, 
       sc.Subscriber_Coverage_PKID, 
FROM Contact_Member cm (NOLOCK) 
INNER JOIN Member_Coverage mc (NOLOCK) 
    ON cm.contact_relation_gid = mc.contact_relation_gid 
    AND mc.Record_Status = 'A' 
INNER JOIN Subscriber_Coverage sc (NOLOCK) 
    ON mc.Subscriber_Coverage_PKID = sc.Subscriber_Coverage_PKID 
    AND mc.Record_Status = 'A' 
LEFT outer JOIN Member_ID mi ON mi.Universal_ID = cm.Contact_Gid 
    --AND mi.Member_ID_Type_PKID='7' 
WHERE cm.Contact_Relation_Gid = @Contact_Relation_Gid 
AND cm.Record_Status = 'A' 

回答

1

加入他們兩個,並使用一個,如果對方不存在:

select bt.name 
,  coalesce(eav1.value, eav2.value) as Value1OrValue2 
from BaseTable bt 
left join EavTable eav1 
on  eav1.id = bt.id 
     and eav1.type = 1 
left join EavTable eav2 
on  eav2.id = bt.id 
     and eav2.type = 2 

此查詢假定永遠不會有多個具有相同ID和類型的記錄。

+0

非常感謝。我甚至從來沒有聽說過聚結! – Sperick