통계 쿼리 작성중인데 고수님들 도움 필요합니다. 0 3 1,004

by K-ART [SQL Query] [2017.04.26 20:32:16]


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물건금액(합계)                                ....................        

 

 

 

합계

by 마농 [2017.04.27 07:31:43]

전월 및 당월, 전주, 금주에 대한 정확한 기준을 제시해 주세요.
실제 원하는 결과값도 예시 자료를 근거로한 정확한 수치로 표현해 주세요.


by K-ART [2017.04.27 20:03:18]

예시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당월총합계 

 

 

 

이게 쿼리 가능할까요.?ㅜㅜ

 

 

 


by 마농 [2017.04.28 08:04:47]
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
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입