SQL忽略基于其他行的行

时间:2017-06-07 22:15:46

标签: sql sql-server

在Microsoft SQL上,我运行一个查询,返回大量具有名称和状态(以及许多其他列)的行,如下所示:

Name  | State   
------|------------    
Bob   | In Progress  
Bob   | In Progress
Sally | Complete      
Sally | Not Started
Sally | In Progress  
Bob   | Not Started  

每一行都有这三种状态中的一种,行可以按任何顺序出现。更令人讨厌的是,行可能会重复。如果有人在进步'然后,我不想看到他们的任何行“未开始”,如果他们是“完整”的话。然后我不想看到“正在进行中”#39;或者'未开始'。

因此,对于上述数据我只想看

Name  | State   
------|------------    
Bob   | In Progress  
Sally | Complete      

这是否可以使用SQL查询?

这是我现在正在使用的实际查询,但我仍然可以获得名称显示多个状态的条目。

1 个答案:

答案 0 :(得分:0)

您似乎想要“最大”状态。这是一种方法:

select name, state
from (select name, state
             row_number() over (partition by name
                                order by (case when State = 'Not Started' then 1
                                               when State = 'In Progress' then 2
                                               when State = 'Complete' then 3
                                               else 0
                                          end) desc
                                ) as seqnum
      from t
     ) t
where seqnum = 1;