※ 아래 Daily Tip은 염기웅님이 제공해주신 내용입니다
오늘은 지난 데일리팁에 이어서, 데이터베이스의 데이터를 주별,
분기별로 요약해서 조회하는 방법에 대하여 알아보도록 하겠습니다.(예제파일
다운받기)
지난 데일리 팁에서는 월별로 데이터를 요약하는 방법에
대해서 알아 보았습니다. Year 함수와 Month 함수를 이용해서 월별 데이터를 추출하는
방법과 Format 함수를 이용해서 월별 데이터를 추출하는 방법에 대하여 알아보았습니다.
오늘은 주별로 데이터를 요약하는 방법과 분기별로 데이터를
요약하는 방법에 대해서 알아보겠습니다.
다음은 주별로 요약한 데이터입니다.
다음은 분기별로 요약한 데이터입니다.
1. 주별로 데이터 요약하기
주별로 데이터를 요약하기 위해서는 Year 함수와 Month
함수로는 표현이 불가능합니다. 하지만, DatePart 함수를 이용하면 주별로
데이터를 요약하는 것이 가능합니다. 마찬가지로 분기별로 요약하는 것도
DatePart 함수를 이용하면 가능합니다.
<용법>
DatePart(interval, date[,firstdayofweek[,
firstweekofyear]])
<인수 설명>
interval : 필수적인 요소. 반환할 시간 간격의 문자식입니다.
fate : 필수적인 요소. 계산할 Variant(Date) 값입니다.
firstdayofweek : 선택적인 요소. 요일을 지정하는 상수입니다. 지정하지
않으면 일요일로 간주합니다.
firstweekofyear : 선택적인 요소. 년을 기준으로 한 첫째 주를 지정하는
상수입니다. 지정하지 않으면 1월 1일을 포함하는 주를 첫째 주로 간주합니다.
인수 |
설명 |
인수 |
설명 |
yyyy' |
년 |
q |
분기 |
m |
월 |
y |
일(일년기준) |
d |
일 |
w |
요일 |
ww |
주 |
h |
시 |
n |
분 |
s |
초 |
<예제>
DatePart(“w”,#2004-07-16#) = 6 (금요일)
DatePart(“ww”,#2004-07-16#) = 29 (2004년의 29번째 주)
DatePart(“q”,#2004-07-16#) = 3 (3분기)
datepart 함수를 이용하면 날짜 데이터에서 원하는
값을 쉽게 추출할 수 있습니다. 이를 이용해서 주별로 요약하는 방법을 익혀보겠습니다.
우선 q004OrderAmountsByWeek1 쿼리를
디자인 보기로 열어 봅시다. datepart 함수를 이용하여 날짜 데이터에서 '주'데이터로 변환하였습니다.
이 쿼리에 대한 결과는
다음과 같습니다.
큰 문제는 없어 보이지만, 이러한 스타일로 요약하는 것은 큰
오류를 포함하고 있습니다. 만약 이 데이터에 2004-01-03 과 2003-01-03 이라는 날짜
값이 있었다면 이것은 모두 ‘1’로 통합됩니다. 2004년 1월 1일도 첫번째 주이고
2003년 1월 3일도 첫번째 주이기 때문입니다. 특별한 경우가 아니라면 년도가 달라지면 별도의
데이터로 보아야 할 것입니다.
다음은 이러한 문제를 해결하기 위한
q005OrderAmountsByWeek2 쿼리입니다. Year 함수를 이용해서
'주'앞에 년도를 표시하였습니다.
이 쿼리의 결과입니다. 이제 큰 문제는 없어보이지만 여기에도
사소한 문제는 숨어 있습니다. 수주 주 필드를 보면 정렬 순서가 엉망이 되어 있는 것을
볼 수 있습니다. ‘1997년 1번째 주’가 왜 ‘1997년 19번째 주’와 ‘1997년 20번째
주’ 사이에 배치되어 있는 것일까요?
당연한 이야기이지만 우리가 year 함수와
datepart 함수를 이용하여 만든 OrderWeek 라는 필드는 더 이상 날짜 필드가 아니고
문자열 필드이기 때문에 이런 현상이 발생한 것입니다. 따라서 ‘1997년 1번째 주’ 라는
값은 ‘1997년 01번째 주’ 라는 값으로 바뀌어야 문제없이 정렬됩니다.
다음은 정렬 문제를 해결한
쿼리(q006OrderAmountsByWeek3)입니다. ‘주’를 표시함에 있어, 1부터
9까지는 앞에 0을 붙여야 하고, 그렇지 않을 때는 지정된 값을 출력하면 됩니다. 이렇게 생각하면
IIF 함수를 떠올리는 분이 많을 것 같습니다.
물론 IIF 함수를 이용해도 쉽게 구현이 가능하지만 보다
간편한 방법은 Format 함수를 이용하는 것입니다. 다음 쿼리를 보면 Format
함수를 이용하였고 형식 문자열로 00 을 사용하였습니다. 00 이라는 형식 문자열은
숫자필드일 때 무조건 숫자를 두 자리 이상으로 표현하라는 뜻입니다. 그래서 1~9까지의 숫자는
01~09로 표현됩니다.
이 쿼리의 결과입니다.
데이터 정렬이 잘 되어 있는 것을 볼 수 있습니다.
2. 분기별로 데이터 요약하기
이번에는 분기별로 데이터를 요약해 보도록 하겠습니다. 분기별로
데이터를 요약하는 것은 앞서 살펴봤던 주별로 데이터를 요약하는 것과 상당히 유사합니다.
다음
쿼리(q007OrderAmountsByQuater1)는 분기별로 데이터를 요약하는 쿼리입니다.
이 쿼리에 대한 결과는 다음과 같습니다. 이것 역시 년도가
구분되어 있지 않아 ‘1’이라는 값은 모든 년도의 1분기에 대한 실적이 요약됩니다.
다음은 분기의 앞부분에 년도를 표시하는
쿼리(q007OrderAmountsByQuater2)입니다.
이 쿼리에 대한 결과는 다음과 같습니다.
오늘은 주별로 요약하는 방법과 분기별로 요약하는 방법에 대해서
알아보았습니다. 오늘 알아본 DatePart 함수는 상당히 자주 사용하는 함수들이므로
액세스 도움말에서 사용방법을 상세히 익혀두기 바랍니다.
액세스 함수의 전반적인 내용은 이전 데일리 팁에
자주 사용하는 액세스 함수라는 제목으로
소개된 적이 있으니 이 내용을 참조하기 바랍니다.
|