쿼리 질문 드립니다. 0 16 1,102

by 유경호 [Oracle 기초] [2013.04.22 17:52:31]


안녕하세요~

아래와 같은 결과 값을 구하고 싶습니다.

NAME, PREFIX, TIME
A1     N    2012-11-3 13:12:28
A2     N    2012-11-19 11:57:11
A3     N    2012-7-28 8:18:50
A4     N    2012-9-13 19:59:28
A5     N    2012-9-22 2:45:26
A6     N    2012-9-28 17:42:39
A7     N    2012-10-6 15:02:40
A8 Y    2012-10-10 0:11:01
A9     N    2012-10-11 17:47:07
A10     N    2012-10-25 21:01:07

위와 같은 데이터가 있는데 PREFIX 값이 Y인것을 항상 맨 위에 놓고 TIME으로 ORDER BY ASC를 하고 싶습니다.

고수님들 도와 주싶시오~

by 야신 [2013.04.22 18:00:10]
select name, prefix, time, decode(prefix,'Y',1,2)  prefix_order
  from temp
order by prefix_order , time 

-- 우리집아찌님이 지적해 주셔서 알았네요. 오타네요.
감사요.

by 우리집아찌 [2013.04.22 18:00:43]

ORDER BY DECODE(PREFIX,'Y',1 , 2) , TIME

by 유경호 [2013.04.22 18:25:15]
우리집아찌님 감사합니다.

by 유경호 [2013.04.22 18:01:33]

테이블 데이터 만들어 올립니다.
WITH T(T1,T2,T3)
AS (SELECT 'A1' T1, 'N', '2012-11-3 13:12:28' FROM DUAL
 UNION ALL
 SELECT 'A2' T1, 'N', '2012-11-19 11:57:11' FROM DUAL
 UNION ALL
 SELECT 'A3' T1, 'N', '2012-7-28 8:18:50' FROM DUAL
 UNION ALL
 SELECT 'A4' T1, 'N', '2012-9-13 19:59:28' FROM DUAL
 UNION ALL
 SELECT 'A5' T1, 'N', '2012-9-22 2:45:26' FROM DUAL
 UNION ALL
 SELECT 'A6' T1, 'N', '2012-9-28 17:42:39' FROM DUAL
 UNION ALL
 SELECT 'A7' T1, 'N', '2012-10-6 15:02:40' FROM DUAL
 UNION ALL
 SELECT 'A8' T1, 'Y', '2012-10-10 0:11:01' FROM DUAL
 UNION ALL
 SELECT 'A9' T1, 'N', '2012-10-11 17:47:07' FROM DUAL
 UNION ALL
 SELECT 'A10' T1, 'N', '2012-10-25 21:01:07' FROM DUAL
)
SELECT * FROM T;


by 우리집아찌 [2013.04.22 18:04:37]

시간은 DATE 타입인가요?

by 유경호 [2013.04.22 18:05:38]

네 DATE형입니다.


by 야신 [2013.04.22 18:06:54]
WITH T(T1,T2,T3)
AS (SELECT 'A1' T1, 'N', '2012-11-3 13:12:28' FROM DUAL
 UNION ALL
 SELECT 'A2' T1, 'N', '2012-11-19 11:57:11' FROM DUAL
 UNION ALL
 SELECT 'A3' T1, 'N', '2012-7-28 8:18:50' FROM DUAL
 UNION ALL
 SELECT 'A4' T1, 'N', '2012-9-13 19:59:28' FROM DUAL
 UNION ALL
 SELECT 'A5' T1, 'N', '2012-9-22 2:45:26' FROM DUAL
 UNION ALL
 SELECT 'A6' T1, 'N', '2012-9-28 17:42:39' FROM DUAL
 UNION ALL
 SELECT 'A7' T1, 'N', '2012-10-6 15:02:40' FROM DUAL
 UNION ALL
 SELECT 'A8' T1, 'Y', '2012-10-10 0:11:01' FROM DUAL
 UNION ALL
 SELECT 'A9' T1, 'N', '2012-10-11 17:47:07' FROM DUAL
 UNION ALL
 SELECT 'A10' T1, 'N', '2012-10-25 21:01:07' FROM DUAL
)
SELECT t1, t2, t3, decode(t2,'Y',1,2) prefix_order
FROM T
ORDER BY prefix_order, t3

by 유경호 [2013.04.22 18:09:47]
답 주신 쿼리 실행하면은 TIME이 내림순으로 나옵니다.

by 마농 [2013.04.22 18:08:19]
ORDER BY prefix DESC, time

by 야신 [2013.04.22 18:10:06]
prefix 에 Y, N 이외의 값이 들어갈가 봐 decode 로 순서를 강제하였습니다. ^^;;

by 우리집아찌 [2013.04.22 18:08:58]

헉  또 바보짓했네 ㅡㅡ;

by 야신 [2013.04.22 18:12:54]
윽....그냥 주신 것을 이용했더니...t3 => time 이 date 형식이 아니라 문자형식이어서 그랬네요.
아으~~~ 샘플데이타 t3 컬럼을 date 형식으로  바꿔서 해보세요.

by 유경호 [2013.04.22 18:18:15]

ORDERBY PREFIXE 값은 DESC가 먹히는데, 뒤에 오는 TIME 컬럼이 잘 안 먹혀요 ..ㅜㅜㅜㅜ

by 마농 [2013.04.22 18:24:47]

샘플 데이터의 time 항목이 문자형이라서 그래요.
문자형인데 09 시로 표시 안하고 9 시로 표시하니 이것 때문에 정렬이 이상한 것입니다.
'09' 로 자리수 채우시던가, Date 형으로 변환한 샘플을 이용하세요.


by 유경호 [2013.04.22 18:33:52]
아~네

이해 했습니다.

감사합니다.

by 유경호 [2013.04.22 18:24:38]

앗 죄송합니다. 결과를 잘 못 봤습니다...

모두 감사합니다.

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