Sql 仅提取失败记录的查询

Sql 仅提取失败记录的查询,sql,sql-server,tsql,select,Sql,Sql Server,Tsql,Select,我需要帮助为下表编写SQL。我有一个包含两列(名称和状态)的表 从上表中,我只想提取失败的记录以及失败后成功的记录。基本上,我想排除刚刚成功的记录 基本上,我想排除刚刚成功的记录 如果希望所有记录的名称至少有一个非成功状态的记录,可以使用存在状态: select t.* from mytable t where exists( select 1 from mytable t1 where t1.name = t.name and t1.status <> 'success'

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

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

基本上,我想排除刚刚成功的记录

如果希望所有记录的
名称
至少有一个非
成功状态
的记录,可以使用
存在状态

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

另一种选择是使用带领带的

不清楚您想要的是所有记录还是唯一不同的名称

示例

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

凯文和迈克被排除在外

请告诉我们您的尝试-因此这不是一项代码编写服务。
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