如何解决查询以获取记录具有some_id和some_flag,以便在oracle中所有相同的some_id必须具有所有some_flag ='Y'
select r1.some_id,count(r1.some_id) as ca from (select r.some_id,r.some_flag,count(r.some_id),count(r.some_flag)
from table1 r
group by r.some_id,r.some_flag) r1 group by r1.some_id
我的要求是:对于表中存在的所有some_id,其some_flag为'Y',如果一个为Y,另一个为N,则不应进入some_id。
实际数据如下:
并希望得到如下结果:
解决方法
通过结合使用MIN
和分析函数,可以避免两次查询表。
SELECT id,some_id,some_flag
FROM (SELECT t.*,MIN (some_flag) OVER (PARTITION BY some_id) AS should_return
FROM table1 t)
WHERE should_return = 'Y'
,
这里是一个选择:每个some_id
的MIN标志必须等于MAX标志,并且必须为Y
:
select *
from table1 a
where a.some_id in (select b.some_id
from table1 b
group by b.some_id
having min(b.some_flag) = max(b.some_flag)
and min(b.some_flag) = 'Y'
)
,
这里是为您提供结果的一种选择。
select *
from table1 r
where r.some_flag='Y'
and not exists (select 1
from table1 r2
where r.some_id=r2.some_id
and r2.some_flag <> 'Y')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。