Oracle SQL/PLSQL: Return 多行数据满足多个条件时的布尔值

Oracle SQL/PLSQL: Return Boolean value when multiple criterion met across many rows of data

我有一个查询当前有 return 多行数据。我需要使用 PL/SQL and/or SQL 分析此数据以确定它是否满足业务需求 - returning TRUEFALSE

Sample Data 1                 Sample Data 2               Sample Data 3

TYPE        STATUS            TYPE        STATUS          TYPE        STATUS  
Red         Open              Red         Open            Red         Open
Blue        Open              Blue        Open            Blue        Open
Yellow      Open              Yellow      Open            Yellow      Open
Red         Closed            Yellow      Closed
Red         Pending

要求 - 如果满足 return TRUE,否则 FALSE:

每个类型的状态必须是 'Open'。

如果同一类型有超过 1 条记录,则至少 1 条记录的状态必须为 'Open',其余记录的状态必须为 'Closed' .

根据以上要求得出的结果:

Sample Data 1 = FALSE
Sample Data 2 = TRUE
Sample Data 3 = TRUE

非常感谢任何帮助,如果这个问题重复,我们深表歉意。

Oracle SQL 没有布尔类型,所以让我们使用 0 和 1:

select type,
       (case when count(distinct case when status = 'open' then type end) = count(distinct type) and 
                  count(case when status = 'open' then type end) = count(distinct type) and
                  sum(case when status not in ('open', 'closed') then 1 else 0 end) = 0                 
             then 1 else 0
        end) as flag
from t
group by type;

逻辑:

  • 第一个条件说每个type至少有一个"open"。
  • 第二个条件(与第一个结合)表示每个 type 恰好有一个 "open".
  • 第三个条件表示唯一的状态是"open"和"closed"。