ORDER BY 질문 입니다. 0 9 2,130

by 풀텀 [SQL Query] [2013.11.11 11:01:14]


질문.png (7,628Bytes)

with t as (
select '5' seq, '내용1' subject, '2013-11-15' d_date, 'Y' new_old from dual
union all
 select '4' seq, '내용2', '2013-11-11', 'Y' from dual
union all
select '3' seq, '내용3', '2013-10-10', 'N' from dual
union all
select '2' seq, '내용4', '2013-10-06', 'N' from dual
 union all
select '1' seq, '내용5', '2013-09-10', 'N' from dual )
SELECT * FROM T ORDER BY D_DATE DESC, SEQ DESC

위의 쿼리로 이미지와 같은 결과를 얻었다고 할때
제가 하고자 하는것은
NEW_OLD가 Y인 데이터는 ASC로
NEW_OLD가 N인 데이터는 DESC로 보여주려 합니다.
조언 부탁드립니다.
by 풀텀 [2013.11.11 11:08:09]

참고로 정렬키에 Index는 없습니다.

by 우리집아찌 [2013.11.11 11:21:21]
-- 이러면 어떨지.. 
SELECT T.* 
   ,SUM(DECODE(new_old,'Y',1)) OVER(ORDER BY d_date desc ) rn1
   ,SUM(DECODE(new_old,'N',1)) OVER(ORDER BY d_date asc ) rn2
 FROM T 
 ORDER BY new_old DESC 
     ,DECODE(new_old,'Y',rn1 , rn2 )  
 

by 풀텀 [2013.11.11 12:45:47]

해보았지만  이렇게 하면
전체에 order by가 먹게 되네요.
new_old가 Y인것은 최상위에 보여야 해요.


by 우리집아찌 [2013.11.11 14:32:22]
안되나요? 테스트할땐 되는듯하던데..

by drakdragon [2013.11.11 12:01:51]

ORDER BY DECODE(NEW_OLD, 'Y', SEQ, SEQ DESC)

안되려나요


by 풀텀 [2013.11.11 12:56:26]
네 안되네요..ㅡㅡ;

by 마농 [2013.11.11 13:04:14]
정렬기준을 날짜와 순번 두개로 가져가는 이유가 있는지요?
순번만으로 해도 될것 같은데요?
 ORDER BY new_old DESC, DECODE(new_old, 'Y', seq, -seq);

by 풀텀 [2013.11.11 13:19:22]

원하는 결과를 얻었습니다.
감사합니다.

order by절에 음수(-)표현도 가능하다는걸 이번에 알게 되었네요.
또 하나 배웠네요^^


by 우리집아찌 [2013.11.11 14:32:43]
흠.. 또 하나 배워가네요.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입