order by 질문 0 5 454

by 문준 [2020.01.29 10:29:48]


안녕하세요

아래의 결과 쿼리문이 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

 

 

by 마농 [2020.01.29 10:55:32]

기존 쿼리의 조건절과 Order by 구문을 보여주시면 좋을 듯 합니다.


by 문준 [2020.01.29 11:13:48]

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을 사용할 수 없습니다.


by jkson [2020.01.29 11:20:22]
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종류에 따라 다를 수 있으니 참고만 하세요.

 


by 문준 [2020.01.29 13:51:48]

뤼스펙..


by 마농 [2020.01.29 15:52:20]
SELECT *
  FROM gl_periods
 WHERE period_set_name = 'KE_CALENDAR'
   AND period_name LIKE 'Jan%'
 ORDER BY CASE WHEN start_date <= sysdate
               THEN -1 ELSE 1 END * SUBSTR(period_name, 5)
;

 

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