with t(no, item_no, status) as
(
select '1', '10', 'N' from dual union all
select '1', '20', 'N' from dual union all
select '1', '30', 'N' from dual union all
select '2', '10', 'C' from dual union all
select '2', '20', 'N' from dual union all
select '2', '30', 'N' from dual union all
select '3', '10', 'N' from dual union all
select '4', '10', 'N' from dual union all
select '4', '20', 'P' from dual union all
select '4', '30', 'C' from dual
)
select *
from t;
위와 같은 데이터가 있다고 가정하고...
제가 원하는 결과는
no
2
4
이렇게 나오면 됩니다.
no로 group by 를 해서 item_no가 2개 이상인 것인데.. 그 중에 status가 모두 같지 않은 것을 뽑으면 됩니다.
그러니까.. 아래와 같은 데이터는 no로 group by 하면 2개 이상이기는 하지만 status값이 C,C 로 같기 때문에 제외되면 됩니다.
1 10 C
1 10 C
감사합니다.
with t(no, item_no, status) as ( select '1', '10', 'N' from dual union all select '1', '20', 'N' from dual union all select '1', '30', 'N' from dual union all select '2', '10', 'C' from dual union all select '2', '20', 'N' from dual union all select '2', '30', 'N' from dual union all select '3', '10', 'N' from dual union all select '4', '10', 'N' from dual union all select '4', '20', 'P' from dual union all select '4', '30', 'C' from dual ) select no from t group by no having count(distinct status ) >= 2 ;