Вы можете использовать avg
агрегацию с having
предложением
with tab(case_no,program_code) as
(
select 101,'TS' from dual union all
select 101,'AP' from dual union all
select 102,'TS' from dual union all
select 102,'OD' from dual union all
select 103,'TS' from dual union all
select 103,'AP' from dual union all
select 103,'OD' from dual
)
select case_no
from tab
group by case_no
having avg(case when program_code in ('TS','AP') then 1 else 0 end) = 1;
CASE_NO
-------
101
Демо