首页 > 解决方案 > 显示符合条件的字段

问题描述

我正在处理一张表,我想在其中显示所有“项目”,其中所有项目都有“状态”=“A”。

这是主表的示例:

+--------------+-----------+-------+
| PROJECT      | COST_ITEM | STATUS|
+--------------+-----------+-------+
| S/180779/01  |    3925   |   A   |        
| S/180779/02  |    4000   |   P   |
+--------------+-----------+-------+

我正在尝试使用此代码:

select project,status
from C_PROJI_ADD_DOC 
where status = 'A'
GROUP BY project,status

我得到的示例:

+--------------+------+
| PROJECT      |STATUS|
+--------------+------+
| S/180063/02  |   A  |        
| S/180157/01  |   A  |
| S/180063/03  |   A  |
| S/180063/05  |   A  |
+--------------+------+ 

下面是我得到的真实示例:

在此处输入图像描述

如果我运行这个查询,会出现其他项目,比如“S/180779/01”,但是当我打开这个项目时,有些项目的状态 = 'P'

+--------------+-----------+-------+
| PROJECT      | COST_ITEM | STATUS|
+--------------+-----------+-------+
| S/180779/01  |    3925   |   A   |        
| S/180779/01  |    3927   |   A   |
| S/180779/01  |    3928   |   P   |        
| S/180779/01  |    3930   |   P   |
+--------------+-----------+-------+

在此处输入图像描述

我怎样才能让它只显示所有项目都为 STATUS = 'A' 的项目

标签: sqlsql-servertsql

解决方案


除了过滤具有“A”的项目外,您还需要一个条件,即同一项目不能存在“P”:

select distinct project, status
from   C_PROJI_ADD_DOC P1
where  status = 'A'
and    not exists (
    select 1
    from   C_PROJI_ADD_DOC P2
    where  P2.status = 'P'
    and    P2.project = P1.project
)

推荐阅读