如何编写SQL脚本以获得所需的输出

时间:2016-02-09 08:30:24

标签: sql sql-server sql-server-2008

Member| Mum_Status
mem1  | active
mem2  | future
mem3  | active
mem3  | future

如何编写查询以获得上表中的输出

  • 当成员当前不活跃时,只需填写未来记录
  • 如果成员同时具有活动和未来状态,则不应填充未来记录

期望的输出:

Member| Status
mem1  | active
mem2  | future
mem3  | active

1 个答案:

答案 0 :(得分:5)

GROUP BY。使用MIN选择活动(如果可用),否则返回将来。

select member, min(status)
from tablename
group by member

只要没有引入其他状态类型,它就能很好地工作。

或者,NOT EXISTS

select member, status
from tablename t1
where status = 'active'
   or NOT EXISTS (select * from tablename t2
                  where t2.member = t1.member
                    and t1.status = 'active')

如果某行处于活动状态,请将其返回。否则它具有future状态,如果同一成员的其​​他行没有活动状态,则返回它。