根据'Case'语句隐藏行

时间:2018-04-30 20:10:10

标签: sql-server

我正在编写一份包含大量选择列表的报告。报告中很少列是基于条件的。以下是我的示例表:

enter image description here

我想仅为那些m_is_req ='1'的客户选择c_id,cv_id和药物日期。对于具有m_is_req = null的其他客户,对于药物数据应该为null。另外对于一个客户我有多种药物。因此对于拥有m_is_req = null的客户端应该只显示一行。以下是我的查询。这为m_is_req = null的客户端生成多行。

  select c.c_id, c.cv_id,
        case when c.m_is_req = '1' then m.m_id else null end,
        case when c.m_is_req = '1' then m.m_name else null end
from Client c join Medication m
on c.c_id = m.c_id

我想要的输出应该是:

enter image description here

1 个答案:

答案 0 :(得分:0)

left join应该有效。请注意在on子句中添加第二个条件。此外,您不需要case,因为所有这些字段都来自[Medication],并且因为连接而无效。

select c.c_id, c.cv_id, c.m_is_req,
    m.m_id,
    m.m_name 
from Client c 
left join Medication m on c.c_id = m.c_id and c.m_is_req = 1

Here是一个小提琴,以防你想测试它。