A테이블 B테이블
날짜 부서 물건 금액 날짜 부서 물건 금액
. .
. .
20170422 가 자동차 10000 20170421 가 비행기 100000
20170423 가 자동차1 20000 20170422 나 비행기2 100000
20170424 나 자동차2 30000 20170423 다 비행기3 100000
20170425 다 자동차3 40000 20170424 다 비행기4 100000
20170426 다 자동차4 50000 20170425 다 비행기5 100000
20170427 다 자동차5 60000 20170426 라 비행기6 100000
20170428 라 자동차6 70000 20170427 라 비행기7 100000
20170429 라 자동차7 80000 20170428 라 비행기8 100000
20170430 마 자동차8 90000 20170429 라 비행기9 100000
20170501 마 자동차9 100000 20170430 마 비행기10 100000
. .
. .
. .
. .
날짜 20170426 입력 하면 통계 쿼리 작성을합니다.
부서명 전월 | 당월 | 전주 | 금주
A물건건수|A물건금액(합계) | B물건건수|B물건금액(합계) A물건건수|A물건금액(합계) | B물건건수|B물건금액(합계) ....................
합계
예시1
4월26일 입력시
네 전월 이라고 하면 3월 1일 부터 3월 31일까지 당월이면 4월1일부터30일 까지 전주면 17일 월요일 부터 금요일 21일
금주면 24일 월요일부터 28일 금요일까지입니다
-------------------------------------------------------------------
금주 현재시점 4월26일 입력시 4월26일까지입니다. 월24 화25 수26 |
목금 데이터가없을수도있으므로
----------------------------------------------------------------------------------------------------------------------------------
예시2
3월15일 입력시
전월이면2월1일부터2월 28일이고 당월이면3월1일부터3월31일 전주면 3월6일 월요일부터 3월10일 금주면 3월13월요일부터17일 금요일 입니다.
---------------------------------------
금주가 과거시점
----------------------------------------------------------------------------------------------------------------------------------
데이터
부서명 전월 | 당월 | 전주 | 금주
A물건건수|A물건금액(합계) | B물건건수|B물건금액(합계) A물건건수|A물건금액(합계) | B물건건수|B물건금액(합계) ....................
가 A전월총건수 |A전월총합계 | B전월총건수 |B전월총합계 A당월총건수 |A당월총합계 | B당월총건수 |B당월총합계
나 A전월총건수 |A전월총합계 | B전월총건수 |B전월총합계 A당월총건수 |A당월총합계 | B당월총건수 |B당월총합계
다 A전월총건수 |A전월총합계 | B전월총건수 |B전월총합계 A당월총건수 |A당월총합계 | B당월총건수 |B당월총합계
라 A전월총건수 |A전월총합계 | B전월총건수 |B전월총합계 A당월총건수 |A당월총합계 | B당월총건수 |B당월총합계
이게 쿼리 가능할까요.?ㅜㅜ
WITH t_a AS ( SELECT '20170422' dt, '가' dept, '자동차' cd, 10000 amt FROM dual UNION ALL SELECT '20170423', '가', '자동차1' , 20000 FROM dual UNION ALL SELECT '20170424', '나', '자동차2' , 30000 FROM dual UNION ALL SELECT '20170425', '다', '자동차3' , 40000 FROM dual UNION ALL SELECT '20170426', '다', '자동차4' , 50000 FROM dual UNION ALL SELECT '20170427', '다', '자동차5' , 60000 FROM dual UNION ALL SELECT '20170428', '라', '자동차6' , 70000 FROM dual UNION ALL SELECT '20170429', '라', '자동차7' , 80000 FROM dual UNION ALL SELECT '20170430', '마', '자동차8' , 90000 FROM dual UNION ALL SELECT '20170501', '마', '자동차9' , 100000 FROM dual ) , t_b AS ( SELECT '20170421' dt, '가' dept, '비행기' cd, 100000 amt FROM dual UNION ALL SELECT '20170422', '나', '비행기2' , 100000 FROM dual UNION ALL SELECT '20170423', '다', '비행기3' , 100000 FROM dual UNION ALL SELECT '20170424', '다', '비행기4' , 100000 FROM dual UNION ALL SELECT '20170425', '다', '비행기5' , 100000 FROM dual UNION ALL SELECT '20170426', '라', '비행기6' , 100000 FROM dual UNION ALL SELECT '20170427', '라', '비행기7' , 100000 FROM dual UNION ALL SELECT '20170428', '라', '비행기8' , 100000 FROM dual UNION ALL SELECT '20170429', '라', '비행기9' , 100000 FROM dual UNION ALL SELECT '20170430', '마', '비행기10', 100000 FROM dual ) SELECT NVL(dept, '합계') 부서 , COUNT(CASE WHEN gb = 1 AND dt BETWEEN dt1 AND dt2 THEN 1 END) 전월A건수 , SUM (CASE WHEN gb = 1 AND dt BETWEEN dt1 AND dt2 THEN amt END) 전월A금액 , COUNT(CASE WHEN gb = 2 AND dt BETWEEN dt1 AND dt2 THEN 1 END) 전월B건수 , SUM (CASE WHEN gb = 2 AND dt BETWEEN dt1 AND dt2 THEN amt END) 전월B금액 , COUNT(CASE WHEN gb = 1 AND dt BETWEEN dt3 AND dt4 THEN 1 END) 당월A건수 , SUM (CASE WHEN gb = 1 AND dt BETWEEN dt3 AND dt4 THEN amt END) 당월A금액 , COUNT(CASE WHEN gb = 2 AND dt BETWEEN dt3 AND dt4 THEN 1 END) 당월B건수 , SUM (CASE WHEN gb = 2 AND dt BETWEEN dt3 AND dt4 THEN amt END) 당월B금액 , COUNT(CASE WHEN gb = 1 AND dt BETWEEN dt5 AND dt6 THEN 1 END) 전주A건수 , SUM (CASE WHEN gb = 1 AND dt BETWEEN dt5 AND dt6 THEN amt END) 전주A금액 , COUNT(CASE WHEN gb = 2 AND dt BETWEEN dt5 AND dt6 THEN 1 END) 전주B건수 , SUM (CASE WHEN gb = 2 AND dt BETWEEN dt5 AND dt6 THEN amt END) 전주B금액 , COUNT(CASE WHEN gb = 1 AND dt BETWEEN dt7 AND dt8 THEN 1 END) 금주A건수 , SUM (CASE WHEN gb = 1 AND dt BETWEEN dt7 AND dt8 THEN amt END) 금주A금액 , COUNT(CASE WHEN gb = 2 AND dt BETWEEN dt7 AND dt8 THEN 1 END) 금주B건수 , SUM (CASE WHEN gb = 2 AND dt BETWEEN dt7 AND dt8 THEN amt END) 금주B금액 FROM (SELECT 1 gb, dt, dept, cd, amt FROM t_a UNION ALL SELECT 2 gb, dt, dept, cd, amt FROM t_b ) , (SELECT TO_CHAR(TRUNC(ADD_MONTHS(dt, -1), 'mm'), 'yyyymmdd') dt1 -- 전월시작일 , TO_CHAR(TRUNC(dt, 'mm')-1, 'yyyymmdd') dt2 -- 전월종료일 , TO_CHAR(TRUNC(dt, 'mm') , 'yyyymmdd') dt3 -- 당월시작일 , TO_CHAR(LAST_DAY(dt) , 'yyyymmdd') dt4 -- 당월종료일 , TO_CHAR(TRUNC(dt-7, 'd') , 'yyyymmdd') dt5 -- 전주시작일 , TO_CHAR(TRUNC(dt, 'd')-1 , 'yyyymmdd') dt6 -- 전주종료일 , TO_CHAR(TRUNC(dt, 'd') , 'yyyymmdd') dt7 -- 금주시작일 , TO_CHAR(TRUNC(dt, 'd')+6 , 'yyyymmdd') dt8 -- 금주종료일 FROM (SELECT TO_DATE('20170426', 'yyyymmdd') dt FROM dual) ) WHERE dt BETWEEN dt1 AND GREATEST(dt4, dt8) GROUP BY ROLLUP(dept) ORDER BY dept ;