Oracle SQL/PLSQL:返回布尔值当多个数据符合多个数据时



我有一个查询,当前返回多行数据。我需要使用PL/SQL和/或SQL分析此数据,以确定它是否符合业务需求 - 返回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

要求 - 如果满足返回TRUE,则否则FALSE

每种类型的状态必须为"打开"。

如果相同类型有1个以上的记录,则至少1个记录的状态必须为"打开",其余记录上的状态必须为"关闭"。

基于上述要求的结果:

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至少有一个"打开"。
  • 第二个条件(与第一个结合在一起)说每个type都有一个"打开"。
  • 第三个条件说唯一的状态是"开放"one_answers"关闭"。

最新更新