database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 905 게시물 읽기
No. 905
Re: 시작일과 종료일 가지고 월별통계 내기
작성자
김봉수
작성일
2003-08-14 17:53
조회수
9,040

당연히 한번의 SQL로 가능합니다.

이때 통계를 내고자 하는 테이블말고, 다른 테이블의 도움이 필요합니다.

보통 업무상 달력테이블을 많이 만들어 씁니다.

일단 달력테이블을 만들고 통계를 내고자 하는 연도의 일자를 모두 입력해 둡니다.

'20030101'부터 '20031231'까지 입력합니다.

그리고 나서 시작 + 종료되어 있는 테이블과 BETWEEN 조인을 합니다.

보통 조인하면 "="만 생각하시는데 모든 관계연산자로 조인이 가능합니다.

달력테이블과 통계를 내고자 하는 테이블과 조인을 하게 되면 시작점과 종료점 사이에 존재하는

모든 점들이 복제되어 나타납니다.

"달력일자 BETWEEN 시작일 AND 종료일" 이렇게 조인합니다.

이제 복제된 데이터를 년월을 기준으로 카운트한 다음 다시 월별로 집계를 내주기만 하면 됩니다.

 

아래는 제가 작성한 SQL입니다.

 

SELECT U_NAME,

ISNULL(SUM(CASE WHEN YYMM = '200301' THEN CNT END),0) [1월],

ISNULL(SUM(CASE WHEN YYMM = '200302' THEN CNT END),0) [2월],

ISNULL(SUM(CASE WHEN YYMM = '200303' THEN CNT END),0) [3월],

ISNULL(SUM(CASE WHEN YYMM = '200304' THEN CNT END),0) [4월],

ISNULL(SUM(CASE WHEN YYMM = '200305' THEN CNT END),0) [5월],

ISNULL(SUM(CASE WHEN YYMM = '200306' THEN CNT END),0) [6월],

ISNULL(SUM(CASE WHEN YYMM = '200307' THEN CNT END),0) [7월],

ISNULL(SUM(CASE WHEN YYMM = '200308' THEN CNT END),0) [8월],

ISNULL(SUM(CASE WHEN YYMM = '200309' THEN CNT END),0) [9월],

ISNULL(SUM(CASE WHEN YYMM = '200310' THEN CNT END),0) [10월],

ISNULL(SUM(CASE WHEN YYMM = '200311' THEN CNT END),0) [11월],

ISNULL(SUM(CASE WHEN YYMM = '200312' THEN CNT END),0) [12월]

FROM (

SELECT U_NAME, SUBSTRING(CALDAT,1,6) YYMM, SUM(1) CNT

FROM TEST INNER JOIN CAL ON

CALDAT BETWEEN DATE_FR AND DATE_TO

GROUP BY U_NAME, SUBSTRING(CALDAT,1,6)) A

GROUP BY U_NAME

[Top]
No.
제목
작성자
작성일
조회
898mysql 사용번
sung
2003-08-08
4025
897table내용의 전송에 대한 문의
김철수
2003-08-03
3449
896보안패치에 대한 문의
김철수
2003-08-02
3431
895시작일과 종료일 가지고 월별통계 내기 [1]
이은성
2003-08-01
5099
905┕>Re: 시작일과 종료일 가지고 월별통계 내기
김봉수
2003-08-14 17:53:06
9040
894데이타 화일만 있는데 복구할수 있는방법이 있을까요?
고종선
2003-08-01
4951
893커서에 대한 질문 입니다. [2]
정성진
2003-07-31
4776
891DB설계에 대한 문의 [2]
김철수
2003-07-26
3825
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.022초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다