중복제거 중 조건에 따라서 남기는 방법에 대하여 질문 있습니다. 0 4 3,510

by OneQue [Oracle 기초] Oracle 중복제거 [2022.07.06 19:20:43]


특정 데이터가 중복인 경우에 대해서 다른 데이터에 대해서 특정 조건 데이터만 남기고 

그 특정 데이터가 중복인 다른 데이터는 없에려고 합니다.

 

예를 들어서

   대메뉴            메뉴              수정권한       삭제권한

-------------------------------------------------------------------------------------

     네위버         사진게시판        all               글쓴이

     네위버         자유게시판        all               글쓴이

     네위버         자유게시판        불가            all

     네위버         질문게시판        글쓴이         불가

     네위버         질문게시판        불가            글쓴이

 

    이런 경우에 

-------------------------------------------------------------------------------------

     대메뉴            메뉴            수정권한       삭제권한

     네위버         사진게시판          all             글쓴이

     네위버         자유게시판          all             글쓴이

     네위버         질문게시판          글쓴이       불가

 

이런식으로 하되, 권한과 관련된 데이터 네가지를 비교하여 권한의 경우 ALL > 글쓴이 > 불가 순으로 우선순위데이터를 가진 로우만 남기는 방식으로요.

도저히 감이 안잡힙니다. 어떤식으로 처리해야 할까요?

 

by OneQue [2022.07.06 20:16:22]

좀 길어지긴 했지만... 

ROW_NUMBER() OVER(PARTITION BY ) 랑 CASE문 이용해서 덮고 덮어서 결국 처리 했습니다. 


by 마농 [2022.07.06 22:14:19]

권한 많은 것 우선이라면
행 을 하나 삭제하는것보다 병합하는게 맞지 않나요?
질문게시판의 경우 (글쓴이, 글쓴이) 가 되는게 합리적인 듯 합니다.


by 신이만든지기 [2022.07.07 18:11:04]
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;  

원하시는 형태인지 모르겠네요.


by OneQue [2022.09.19 10:58:27]

늦었지만 답변 감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입