Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

SAP DB에서 특정 월부터 시작하는 SQL 정렬 쿼리 작성 방법

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는 물론 대부분의 관계형 데이터베이스에서 동일하게 활용할 수 있습니다.