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