根据条件过滤掉多行

时间:2014-01-21 10:01:31

标签: sql

我在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行仍然未决,所以我需要捕获它。 有关如何在查询选择中过滤掉它的任何想法吗?非常感谢

2 个答案:

答案 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';

干杯