sql - ORACLE 根据两列查找计数

标签 sql database oracle

我有一个 Oracle 数据库表,其中

我在这个特定的表中有很多列,但我想根据下面描述的两列之间的计算得到结果

Project|Status
-------|--------
 1     | Done    
 1     | Pending
 2     | Done

我想获得待定项目的数量,例如,如果项目 1 的状态为待定,并且它在表中的任何位置都没有完成状态,那么它将是一个待定任务,但如果项目 1 的状态为待定,并且在任何其他行的表中也有完成状态,那么这将不是待处理任务,

我试过这个查询,但它返回的行同时具有待定和完成状态,

SELECT * FROM MYTABLE T 
WHERE EXISTS
(SELECT 1 FROM MYTABLE WHERE Project = A.Project AND ROWID < A.ROWID AND            
Status ='Done') 
AND T.Status!='Done' AND T.Status='Pending'

@更新 我在此列中还有其他状态值,如“部分完成”和“已请求”,因此我只想获得那些在整个表中只有待处理状态而没有“完成”状态的项目。

最佳答案

如果您想获得未决项目并且没有其他状态“完成”,请使用以下查询。

SELECT * FROM MYTABLE T 
WHERE T.Status='Pending'
AND NOT EXISTS --excluding projects with 'done' status
(SELECT 1 FROM MYTABLE A WHERE A.Project = T.Project AND         
A.Status ='Done') 

如果您想获得待处理项目的总数,请使用以下脚本。

 SELECT COUNT(*) FROM MYTABLE T 
 WHERE T.Status='Pending'
    AND NOT EXISTS
    (SELECT 1 FROM MYTABLE A WHERE A.Project = T.Project AND         
    A.Status ='Done') 

关于sql - ORACLE 根据两列查找计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39914002/

相关文章:

mysql - 删除和更新时的默认值是什么

sql - 如何使用 SQL Server 完成此任务

SQL 比较两个日期的最快方法(非标准 varchar 格式和日期时间)

android - ((ChuckApplication) getActivity().getApplication()).setCurrentGame(c) 在 fragment 中

sql - 通过另一个表中的列进行SQL排序

database - <your favorite database> 最大的缺点是什么?

java - MySQL数据库管理

sql - 使用基于函数的索引延迟唯一约束?

sql - oracle中如何使用级联

java - SQL插入表错误