IT/DB
[오라클]커스텀 정렬하기
Kanzler
2016. 11. 8. 07:00
오라클에서는 일반적으로 정렬을 하게 되는 경우 ASC(오름차순),DESC(내림차순)를 이용해서 데이터를 정렬을 합니다.
그런데 예외적으로 정령을 처리 해야 하는 경우가 생기게 됩니다. 가령 데이터에 월,화,수,목,금,토,일에 들어가 있다면 의도는 월~일까지 순서대로 정렬하고 싶은데, ASC(오름차순),DESC(내림차순)을 이용해서 정렬 하는 경우 원하는 정렬 결과가 나오지 않습니다. 이럴때 사용하는 것이 바로 커스텀 정렬입니다.
커스텀 정렬은 컬럼의 데이터를 가지고 오라클 내 정렬방법이 아니라 사용자가 직접 정렬순서를 설정할수 있도록 할 수 있도록 해주는 기능입니다. 임의의 테이블을 만들고 데이터를 INSERT 한 후에 특정 정렬순서에 따라 정렬하는 간단한 예제를 알아보도록 하겠습니다.
테이블 생성
1 2 3 4 5 6 7 8 9 10 11 12 13 | CREATE TABLE member( no NUMBER PRIMARY KEY, phone VARCHAR2 (16), name VARCHAR2 (32) week VARCHAR2 (6) ); INSERT INTO member VALUES (100, '010-1234-5678', '홍길동','월요일'); INSERT INTO member VALUES (200, '02-1234-5678', '갑돌이','수요일'); INSERT INTO member VALUES (300, '010-987-6543', '아무개','금요일'); INSERT INTO member VALUES (400, '031-123-5678', '갑순이','화요일'); INSERT INTO member VALUES (500, '052-1234-5678', '철수','목요일'); INSERT INTO member VALUES (600, '001-987-6543', '영희','토요일'); INSERT INTO member VALUES (700, '063-123-6543', '철희','일요일'); | cs |
일반 정렬
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | SELECT * FROM member ORDER BY WEEK /** 실행 결과 NO PHONE NAME WEEK 300 010-987-6543 아무개 금요일 500 052-1234-5678 철수 목요일 200 02-1234-5678 갑돌이 수요일 100 010-1234-5678 홍길동 월요일 700 063-123-6543 철희 일요일 600 001-987-6543 영희 토요일 400 031-123-5678 갑순이 화요일 **/ | cs |
커스텀 정렬
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | SELECT * FROM member ORDER BY CASE WHEN WEEK='일요일' THEN 1 WHEN WEEK='월요일' THEN 2 WHEN WEEK='화요일' THEN 3 WHEN WEEK='수요일' THEN 4 WHEN WEEK='목요일' THEN 5 WHEN WEEK='금요일' THEN 6 WHEN WEEK='토요일' THEN 7 ELSE 99 END ASC /** 실행 결과 NO PHONE NAME WEEK 700 063-123-6543 철희 일요일 100 010-1234-5678 홍길동 월요일 400 031-123-5678 갑순이 화요일 200 02-1234-5678 갑돌이 수요일 500 052-1234-5678 철수 목요일 300 010-987-6543 아무개 금요일 600 001-987-6543 영희 토요일 **/ | cs |
사용자 입맛에 맞게 특정 컬럼에 데이터값에 따라 정렬순서를 임의로 설정하여 정렬처리 할 수 있습니다.
각각의 상황에 맞게 커스터마이징 해서 사용 하시면 될것 같습니다.