只提取失败记录的查询

cetgtptt  于 2021-08-13  发布在  Java
关注(0)|答案(2)|浏览(240)

我需要帮助为下表编写sql。我有一个包含两列(名称和状态)的表。

Name    Status
Kevin   success 
Mark    fail 
Mark    success 
Mike    success 
Yann    fail 
Yann    success 
George  fail
Boi     Fail

从上表中,我只想提取失败的记录,以及失败后成功的记录。基本上我想排除刚刚成功的记录。

jmp7cifd

jmp7cifd1#

基本上我想排除刚刚成功的记录。
如果你想要所有的记录 name 至少有一个非- 'success' 状态,您可以使用 exists :

select t.*
from mytable t
where exists(
    select 1 from mytable t1 where t1.name = t.name and t1.status <> 'success'
)

或者,如果你想要一个 name 至少有一个非- 'success' 状态,则可以使用 having 条款:

select name
from mytable
group by name
having max(case when status <> 'success' then 1 else 0 end) = 1
cbeh67ev

cbeh67ev2#

另一个选择是使用 WITH TIES 不清楚您是要所有记录还是只需要不同的名称
例子

Declare @YourTable Table ([Name] varchar(50),[Status] varchar(50))
Insert Into @YourTable Values 
 ('Kevin','success')
,('Mark','fail')
,('Mark','success')
,('Mike','success')
,('Yann','fail')
,('Yann','success')
,('George','fail')
,('Boi','Fail')

Select top 1 with ties *
 From @YourTable
 Order By min(case when status='Fail' then 0 else 1 end) over (partition by [Name] )

退货

Name    Status
Boi     Fail
George  fail
Mark    fail
Mark    success
Yann    fail
Yann    success

凯文和迈克被排除在外

相关问题