Sql 根据条件筛选出多行
我是sql新手。我有一个查询,它生成以下结果Sql 根据条件筛选出多行,sql,Sql,我是sql新手。我有一个查询,它生成以下结果 DOCNUM USER STATUS ------ ----- ------ 10001 A1 PENDING 10001 A2 APPROVED 10001 A3 PENDING 10002 B1 PENDING 10002 B2 PENDING 10002 B3 PENDING 我只需要根据docnum筛选出挂起的行,如上面的示例所示,docnum
DOCNUM USER STATUS
------ ----- ------
10001 A1 PENDING
10001 A2 APPROVED
10001 A3 PENDING
10002 B1 PENDING
10002 B2 PENDING
10002 B3 PENDING
我只需要根据docnum筛选出挂起的行,如上面的示例所示,docnum 10001有3行,但有一行已批准,因此我不需要捕获所有这3行。至于Docnum 10002,所有3行仍然挂起,所以我需要捕获它。
你知道如何在查询选择中过滤掉它吗?非常感谢,我不太清楚你的意思。 差不多
select *
from yourtable
where status = 'PENDING'
?
好的,从你的评论我现在明白你的意思了。试试这个:
select *
from yourtable t1
where not exists (
select 1
from yourtable t2
where t1.docnum = t2.docnum
and t2.status != 'PENDING'
)
要解释其工作原理,请执行以下操作:
内部查询选择在某个位置具有“已批准”状态的所有文档。如果此集合对于某些文档为空,则所有状态都必须为“挂起”如果需要查找每个docnum的挂起文档计数,则以下内容应足够:
SELECT docnum, count(1) FROM `table` where Status = 'PENDING' GROUP BY Docnum;
如果你只想找到所有待处理的条目,那么上面@Ronald提供的答案就是工作
如果要按指定docnum的挂起状态选择挂起行,可以执行以下操作:
SELECT * FROM `table` where Status = 'PENDING' AND Docnum = '10001';
干杯标记您的目标RDBMS。嗨,ronald,我无法按状态筛选,因为我需要它链接到docnum。将它链接到docnum是什么意思?类似于从状态为'PENDING'和docnum为'12345'的表中选择*?或者不带引号当然,如果docnum定义为numericHi ronald,一个文档编号可以有多行,由不同的用户生成,但每个文档只能有两种状态,即“待定”或“已批准”,因此出于报告目的,我只想获取所有行都没有任何批准状态的文档,对于那些已经至少有一行“approved”要过滤掉的人来说,答案不错,但我认为你的意思是从不存在的表t1中选择*从表t2中选择1,其中t1.docnum=t2.docnum和t2.status!='谢谢艾尔和罗纳德。