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 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
要求 - 如果满足 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"。
我有一个查询当前有 return 多行数据。我需要使用 PL/SQL and/or SQL 分析此数据以确定它是否满足业务需求 - returning 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
要求 - 如果满足 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"。