SAP DB에서 월별 데이터를 다룰 때, 회계 연도처럼 달력 순서가 아닌 특정 월부터 데이터를 정렬해야 하는 경우가 자주 있습니다. 예를 들어 8월을 한 해의 시작으로 보고 8월 → 9월 → … → 7월 순서로 정렬하고 싶다면, 단순히 ORDER BY에 월 컬럼을 지정하는 것만으로는 원하는 결과를 얻을 수 없습니다.
T0.Name이 문자형(char) 필드인 경우
월 값이 문자형 필드(T0.Name)에 저장되어 있다면, 앞 두 글자를 숫자로 변환한 뒤 조건에 따라 값을 보정하는 방식으로 정렬 키를 새로 만들어야 합니다. 이때 ORDER BY 절을 아래와 같이 작성하면 됩니다.
order by
case when cast(left (T0.Name,2) as int)>=8
then cast(left (T0.Name,2) as int)-8
else cast(left (T0.Name,2) as int)+4
end쿼리 로직 설명
LEFT(T0.Name, 2): 문자형 월 값에서 앞 두 자리를 추출합니다. (예: '08월' → '08')CAST(... AS INT): 추출한 문자열을 정수로 변환하여 숫자 비교가 가능하도록 합니다.CASE WHEN ... >= 8 THEN ... - 8 ELSE ... + 4 END: 8월 이상은 8을 빼고, 8월 미만은 4를 더해 8월이 가장 앞에 오도록 정렬 우선순위를 재배치합니다.
즉, 8월은 0, 9월은 1, … 12월은 4, 1월은 5, … 7월은 11의 정렬 값을 갖게 되어 8월부터 시작하는 연도 순서대로 정렬됩니다.
시작 월을 변경하는 일반 공식
회계 연도의 시작 월이 다르다면 조건값과 가감 상수를 조정하면 됩니다. 시작 월을 S라고 할 때, 월 값이 S 이상이면 S를 빼고, S 미만이면 12 − S를 더하면 됩니다. 예를 들어 4월부터 정렬하고 싶다면 >= 4 THEN -4 ELSE +8 형태로 작성하면 됩니다.
이 방식은 별도의 정렬용 컬럼을 추가하지 않고도 ORDER BY 절 안에서 회계 연도 기준 정렬을 구현할 수 있어, SAP DB는 물론 대부분의 관계형 데이터베이스에서 동일하게 활용할 수 있습니다.