특정 데이터가 중복인 경우에 대해서 다른 데이터에 대해서 특정 조건 데이터만 남기고
그 특정 데이터가 중복인 다른 데이터는 없에려고 합니다.
예를 들어서
대메뉴 메뉴 수정권한 삭제권한
-------------------------------------------------------------------------------------
네위버 사진게시판 all 글쓴이
네위버 자유게시판 all 글쓴이
네위버 자유게시판 불가 all
네위버 질문게시판 글쓴이 불가
네위버 질문게시판 불가 글쓴이
이런 경우에
-------------------------------------------------------------------------------------
대메뉴 메뉴 수정권한 삭제권한
네위버 사진게시판 all 글쓴이
네위버 자유게시판 all 글쓴이
네위버 질문게시판 글쓴이 불가
이런식으로 하되, 권한과 관련된 데이터 네가지를 비교하여 권한의 경우 ALL > 글쓴이 > 불가 순으로 우선순위데이터를 가진 로우만 남기는 방식으로요.
도저히 감이 안잡힙니다. 어떤식으로 처리해야 할까요?
좀 길어지긴 했지만...
ROW_NUMBER() OVER(PARTITION BY ) 랑 CASE문 이용해서 덮고 덮어서 결국 처리 했습니다.
권한 많은 것 우선이라면
행 을 하나 삭제하는것보다 병합하는게 맞지 않나요?
질문게시판의 경우 (글쓴이, 글쓴이) 가 되는게 합리적인 듯 합니다.
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;
원하시는 형태인지 모르겠네요.
늦었지만 답변 감사합니다.