by OneQue [Oracle 기초] Oracle 중복제거 [2022.07.06 19:20:43]
특정 데이터가 중복인 경우에 대해서 다른 데이터에 대해서 특정 조건 데이터만 남기고
그 특정 데이터가 중복인 다른 데이터는 없에려고 합니다.
예를 들어서
대메뉴 메뉴 수정권한 삭제권한
-------------------------------------------------------------------------------------
네위버 사진게시판 all 글쓴이
네위버 자유게시판 all 글쓴이
네위버 자유게시판 불가 all
네위버 질문게시판 글쓴이 불가
네위버 질문게시판 불가 글쓴이
이런 경우에
-------------------------------------------------------------------------------------
대메뉴 메뉴 수정권한 삭제권한
네위버 사진게시판 all 글쓴이
네위버 자유게시판 all 글쓴이
네위버 질문게시판 글쓴이 불가
이런식으로 하되, 권한과 관련된 데이터 네가지를 비교하여 권한의 경우 ALL > 글쓴이 > 불가 순으로 우선순위데이터를 가진 로우만 남기는 방식으로요.
도저히 감이 안잡힙니다. 어떤식으로 처리해야 할까요?
with table_a as ( select 'all' code, 1 val from dual union all select '글쓴이', 2 from dual union all select '불가', 3 from dual ), table_b as ( select '네이버' menu1, '사진게시판' menu2, 'all' prv_modify, '글쓴이' prv_remove from dual union all select '네이버', '자유게시판', 'all', '글쓴이' from dual union all select '네이버', '자유게시판', '불가', 'all' from dual union all select '네이버', '질문게시판', '글쓴이', '불가' from dual union all select '네이버', '질문게시판', '불가', '글쓴이' from dual ) select * from (select b.* , a.val modify_val , c.val remove_val , row_number() over(partition by menu1, menu2 order by a.val + c.val asc, a.val asc) rn from table_a a, table_b b , table_a c where b.prv_modify = a.code and b.prv_remove = c.code) where rn = 1;
원하시는 형태인지 모르겠네요.