Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 根据条件筛选出多行_Sql - Fatal编程技术网

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

我是sql新手。我有一个查询,它生成以下结果

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!='谢谢艾尔和罗纳德。