오라클 특정컬럼 중복값 NULL 처리 0 5 4,774

by 지에나르 [SQL Query] [2016.03.25 10:18:44]


안녕하세요. 이렇게 처리할 방법이 있나 해서 질문 드려봅니다.

예를들어 SELECT 결과값이

아파트1  60  30000
아파트1  60  35000
아파트1  70  40000
아파트1  80  45000
아파트2  100  50000
아파트2  120  50000
아파트3  100  50000
아파트4  100  50000

위 표와 같습니다.

아래 결과처럼 처리를 하고싶은데 고수분들 답변 부탁드리겠습니다.

 대략 설명을 하자면 아파트명, 면적 순서로 정렬이 되어있는 상태이구요.

아파트명이 동일할 경우 다음 값은 NULL값이 표시되고

면적도 마찬가지로 동일한 아파트명에 한하여 면적이 동일할경우 다음 값음 NULL로 표시되게할 방법이 있을까요?

 

도움주시는분들 항상 감사드립니다.

by swlee [2016.03.25 10:44:01]
with t  (col1,col2,col3) as (
select '아파트1',  60,  30000 from dual union all
select '아파트1',  60,  35000 from dual union all 
select '아파트1',  70,  40000 from dual union all 
select '아파트1',  80,  45000 from dual union all 
select '아파트2',  100,  50000 from dual union all 
select '아파트2',  120,  50000 from dual union all 
select '아파트3',  100,  50000 from dual union all 
select '아파트4',  100,  50000 from dual)
select decode(rn1,1,col1) col1
      , decode(rn2,1,col2) col2
      , col3
from (
select col1,col2,col3
      , row_number() over(partition by col1 order by col2,col3) rn1
      , row_number() over(partition by col1,col2 order by col3) rn2
from t)
;

 


by 마농 [2016.03.25 10:51:50]

, ROW_NUMBER() OVER(PARTITION BY col1 ORDER BY col2, col3) rn1
, ROW_NUMBER() OVER(PARTITION BY col1, col2 ORDER BY col3) rn2


by swlee [2016.03.25 11:41:02]

수정했습니다~


by 창조의날개 [2016.03.25 13:06:37]


SELECT
       DECODE(LAG(col1) OVER (ORDER BY col1,col2,col3),col1,NULL,col1) 아파트명
     , DECODE(LAG(col2) OVER (PARTITION BY col1 ORDER BY col2,col3), col2, NULL, col2)  면적
     , col3 가격
FROM t
ORDER BY t.col1, t.col2, t.col3
;

by 지에나르 [2016.03.30 15:23:37]

답변주신분들 감사드립니다!

해결했습니다!

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