我在sql.i中新建了一个生成以下结果的查询
DOCNUM USER STATUS
------ ----- ------
10001 A1 PENDING
10001 A2 APPROVED
10001 A3 PENDING
10002 B1 PENDING
10002 B2 PENDING
10002 B3 PENDING
我需要根据docnum过滤掉Pending行,如上例所示,docnum 10001有3行,但其中一行已批准,因此我不需要捕获所有这3行。至于Docnum 10002,所有3行仍然未决,所以我需要捕获它。 有关如何在查询选择中过滤掉它的任何想法吗?非常感谢
答案 0 :(得分:0)
我不太清楚你的意思。 像
这样的东西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'
)
解释它的工作原理: 内部查询选择在某处具有APPROVED状态的所有文档。如果某个文档的此集合为空,则所有状态必须为PENDING
答案 1 :(得分:0)
如果您需要查找"未决文件的数量"对于每个docnum,以下内容应该足够了:
SELECT docnum, count(1) FROM `table` where Status = 'PENDING' GROUP BY Docnum;
如果你只是想找到所有待处理的条目,那么上面@Ronald提供的答案就是工作。
如果您想按照SPECIFIED docnum的PENDING状态选择待处理行,您可以执行以下操作:
SELECT * FROM `table` where Status = 'PENDING' AND Docnum = '10001';
干杯