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

use*_*424 2 sql sql-server sql-server-2008

Member| Mum_Status
mem1  | active
mem2  | future
mem3  | active
mem3  | future
Run Code Online (Sandbox Code Playgroud)

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

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

期望的输出:

Member| Status
mem1  | active
mem2  | future
mem3  | active
Run Code Online (Sandbox Code Playgroud)

jar*_*rlh 5

做一个GROUP BY.使用MIN挑有效(如果可用),否则将来返回.

select member, min(status)
from tablename
group by member
Run Code Online (Sandbox Code Playgroud)

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

或者,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')
Run Code Online (Sandbox Code Playgroud)

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