728x90
데이터를 정렬할 때 일반적으로 ORDER BY 함수를 사용한다.
하지만 더 복잡한 정렬 방식에는 적합하지 못한 함수이다.
가령 정렬을 사용하되,
특정 데이터 값은 가장 상단에 보여주고 나머지 데이터만을 정렬해야 할 때는 ORDER BY를 사용할 수 없다.
이해를 돕기위해 예제를 보자.
위와 같은 데이터가 존재한다고 가정하자.
이 데이터를 유통기한 별로 정렬하면
1
2
3
|
SELECT STOCK_CD, STOCK_NM, EXPI_DT, DELV_STATUS
FROM ORDER_TABLE
ORDER BY EXPI_DT;
|
cs |
이렇게 정렬이 가능하다.
그런데 여기서 배송 완료된 상품은 최상단으로 올리고 나머지 데이터만 정렬하고자 한다면?
ORDER BY DECODE 를 사용하면 가능하다.
예시를 드는 것이 가장 이해가 빠르므로 바로 예시...
1
2
3
|
SELECT STOCK_CD, STOCK_NM, EXPI_DT, DELV_STATUS
FROM ORDER_TABLE
ORDER BY EXPI_DT DECODE(DELV_STATUS, '배송완료', 1,2), EXPI_DT;
|
cs |
DECODE 안에 인자를 넣으면 된다.
물론 인자를 여러 개 사용할 수도 있다.
1
2
3
|
SELECT STOCK_CD, STOCK_NM, EXPI_DT, DELV_STATUS
FROM ORDER_TABLE
ORDER BY EXPI_DT DECODE(DELV_STATUS, '배송완료', 1, '배송중',2), EXPI_DT;
|
cs |
자매품으로 ORDER BY CASE 도 있다.
1
2
3
|
SELECT STOCK_CD, STOCK_NM, EXPI_DT, DELV_STATUS
FROM ORDER_TABLE
ORDER BY EXPI_DT CASE(DELV_STATUS WHEN '배송완료' THEN 1 WHEN '배송중' THEN 2 ELSE 3), EXPI_DT;
|
cs |
개인적으로는 DEOCDE 가 더 보기 편해서 CASE 보다 DECODE를 더 자주 사용하게 될 것 같다.
'DB > Oracle' 카테고리의 다른 글
[Oracle]LPAD, RPAD 함수(공백 채우기, 0 채우기) (0) | 2022.03.15 |
---|---|
[Oracle] 계층형 쿼리 쉬운 정리(START WITH CONNECT BY) (5) | 2022.03.06 |
[Oracle] MAX +1에서 값이 10이상 증가하지 않는 경우 (1) | 2022.02.08 |
[Oracle]컬럼명으로 테이블 찾기 (0) | 2022.02.08 |
[Oracle]테이블 코멘트(COMMENTS) 조회 (0) | 2022.02.08 |
댓글