1

我有一个名为 Member_Id 的表,其中有一个名为 Member_ID_Type 的列。下面的 select 语句从同一个表中返回另一列 id_value 的值。select 语句中表的连接位于通用 id 列上。该表中可能有多个具有相同通用 ID 的条目。

我想调整 select 语句,使其返回 member_id_type 等于“7”的条目的 id_values。但是,如果这是 null 那么我想返回 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'
4

1 回答 1

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 和类型的记录。

于 2013-09-25T10:27:35.710 回答