안녕하세요
아래의 결과 쿼리문이 order by 순으로 정렬될 때,
Jan-2007
Jan-2008
Jan-2009
Jan-2010
Jan-2011
Jan-2012
Jan-2013
Jan-2014
Jan-2015
Jan-2016
Jan-2017
Jan-2018
Jan-2019
Jan-2020
Jan-2021
Jan-2022
Jan-2023
Jan-2024
Jan-2025
Jan-2026
Jan-2027
Jan-2028
Jan-2029
Jan-2030
Jan-2031
Jan-2032
Jan-2033
Jan-2034
Jan-2035
order by 순
jan-2020 , jan-2019 ~ jan-2007, jan2021~jan2035
select *
FROM GL_PERIODS A
WHERE A.PERIOD_SET_NAME = 'KE_CALENDAR'
AND A.Period_Name like 'Jan%'
ORDER BY CASE WHEN A.START_DATE = TO_DATE(TO_CHAR(SYSDATE,'YYYY-MM')||-'01','YYYY-MM-DD') THEN 1
WHEN A.START_DATE < TO_DATE(TO_CHAR(SYSDATE,'YYYY-MM')||-'01','YYYY-MM-DD') THEN 2
else 3 END desc; --이렇게 수정해보았으나 잘안되네요 ㅠ
이부분에서 원래 쿼리는 order by a.start_date 였습니다. union all로는 해결 가능하나 현재 시스템상 union all을 사용할 수 없습니다.
WITH T(DT) AS ( SELECT 'JAN-2007' FROM DUAL UNION ALL SELECT 'JAN-2008' FROM DUAL UNION ALL SELECT 'JAN-2009' FROM DUAL UNION ALL SELECT 'JAN-2010' FROM DUAL UNION ALL SELECT 'JAN-2011' FROM DUAL UNION ALL SELECT 'JAN-2012' FROM DUAL UNION ALL SELECT 'JAN-2013' FROM DUAL UNION ALL SELECT 'JAN-2014' FROM DUAL UNION ALL SELECT 'JAN-2015' FROM DUAL UNION ALL SELECT 'JAN-2016' FROM DUAL UNION ALL SELECT 'JAN-2017' FROM DUAL UNION ALL SELECT 'JAN-2018' FROM DUAL UNION ALL SELECT 'JAN-2019' FROM DUAL UNION ALL SELECT 'JAN-2020' FROM DUAL UNION ALL SELECT 'JAN-2021' FROM DUAL UNION ALL SELECT 'JAN-2022' FROM DUAL UNION ALL SELECT 'JAN-2023' FROM DUAL UNION ALL SELECT 'JAN-2024' FROM DUAL UNION ALL SELECT 'JAN-2025' FROM DUAL UNION ALL SELECT 'JAN-2026' FROM DUAL UNION ALL SELECT 'JAN-2027' FROM DUAL UNION ALL SELECT 'JAN-2028' FROM DUAL UNION ALL SELECT 'JAN-2029' FROM DUAL UNION ALL SELECT 'JAN-2030' FROM DUAL UNION ALL SELECT 'JAN-2031' FROM DUAL UNION ALL SELECT 'JAN-2032' FROM DUAL UNION ALL SELECT 'JAN-2033' FROM DUAL UNION ALL SELECT 'JAN-2034' FROM DUAL UNION ALL SELECT 'JAN-2035' FROM DUAL ) SELECT * FROM T ORDER BY CASE WHEN SUBSTR(DT,5) = TO_CHAR(SYSDATE,'YYYY') THEN 1 WHEN SUBSTR(DT,5) < TO_CHAR(SYSDATE,'YYYY') THEN 2 ELSE 3 END , CASE WHEN SUBSTR(DT,5) < TO_CHAR(SYSDATE,'YYYY') THEN TO_NUMBER(SUBSTR(DT,5)) * -1 ELSE TO_NUMBER(SUBSTR(DT,5)) END 컬럼 데이터형, DB종류에 따라 다를 수 있으니 참고만 하세요.