통계 쿼리 질문 드립니다. 1 4 2,225

by 허접탱이 [SQL Query] 쿼리 통계 [2013.11.18 09:10:09]



안녕하세요.
날씨가 많이 추워졌네요.. 감기 조심하세요.^^

통계 쿼리를 짜야 하는데..머리가 돌아가질 않아..이렇게 질문을 올리게되었습니다.
회원님들의 도움 부탁 드립니다.

우선 테이블은 3개로 구성이 되어있습니다.
테이블 A : 코드 테이블
테이블 B : 1 지점 거래량 테이블
테이블 C : 2 지점 거래량 테이블

테이블 레이아웃은
테이블 A : 서비스 코드, 서비스명
테이블 B : 날짜(YYYYMMDD), 서비스 코드, 거래횟수, 직원 id
테이블 C : 날짜(YYYYMMDD), 서비스 코드, 거래횟수, 지점코드

이런식으로 구성이 되어있습니다.
제가 원하는 방식은 월 단위로 조회가 되도록 해야하며,
조회되는 데이터는 서비스코드, 서비스명, 1일, 2일,3일....28일, 29일,30일, 31일 의 각 각의 거래횟수 카운트
이렇게 나올수 있도록 조회를 하고 싶습니다.
아래 테이블의 내용을 참고 해주시면 되겠습니다.
서비스코드 서비스명 1일 2일 3일 ….. 29일 30일 31일
001 서비스 등록 0 1 15 ….. 0 5 3
002 서비스 조회 10 25 0 ….. 55 100 30
003 서비스 변경 1 1 2 ….. 0 1 5

그럼 회원님들의 좋은 답변 기다리겠습니다.
감사합니다.^^
by 우리집아찌 [2013.11.18 09:49:37]
 
WITH T1 AS ( 
SELECT '001' CODE ,'서비스 등록' CODE_NM FROM DUAL UNION ALL
SELECT '002' ,'서비스 조회' FROM DUAL UNION ALL
SELECT '003' ,'서비스 변경' FROM DUAL 
),T2 AS ( -- ID별
SELECT '20131010' DT ,'002' CODE ,'1' CNT ,'A' ID FROM DUAL UNION ALL
SELECT '20131011' ,'003' ,'2' ,'B' FROM DUAL UNION ALL
SELECT '20131012' ,'001' ,'3' ,'C' FROM DUAL UNION ALL
SELECT '20131012' ,'001' ,'4' ,'D' FROM DUAL 
),T3 AS ( -- 지점별
SELECT '20131001' DT ,'002' CODE ,'1' CNT ,'A' SITE FROM DUAL UNION ALL
SELECT '20131002' ,'003' ,'2' ,'B' FROM DUAL UNION ALL
SELECT '20131003' ,'001' ,'3' ,'C' FROM DUAL UNION ALL
SELECT '20131012' ,'001' ,'4' ,'D' FROM DUAL 
) 
 

SELECT T1.CODE 
 ,T1.CODE_NM 
 ,SUM(DECODE(SUBSTR(T2.DT,7,2),01,T2.CNT)) SUM1
 ,SUM(DECODE(SUBSTR(T2.DT,7,2),02,T2.CNT)) SUM2
 ,SUM(DECODE(SUBSTR(T2.DT,7,2),03,T2.CNT)) SUM3
 ,SUM(DECODE(SUBSTR(T2.DT,7,2),04,T2.CNT)) SUM4
 ,SUM(DECODE(SUBSTR(T2.DT,7,2),05,T2.CNT)) SUM5
 ,SUM(DECODE(SUBSTR(T2.DT,7,2),06,T2.CNT)) SUM6
 ,SUM(DECODE(SUBSTR(T2.DT,7,2),07,T2.CNT)) SUM7
 ,SUM(DECODE(SUBSTR(T2.DT,7,2),08,T2.CNT)) SUM8
 ,SUM(DECODE(SUBSTR(T2.DT,7,2),09,T2.CNT)) SUM9
 ,SUM(DECODE(SUBSTR(T2.DT,7,2),10,T2.CNT)) SUM10
 ,SUM(DECODE(SUBSTR(T2.DT,7,2),11,T2.CNT)) SUM11
 ,SUM(DECODE(SUBSTR(T2.DT,7,2),12,T2.CNT)) SUM12
 ,SUM(DECODE(SUBSTR(T2.DT,7,2),13,T2.CNT)) SUM13
 FROM T1 
   ,(SELECT DT , CODE , CNT FROM T2 UNION ALL SELECT DT , CODE , CNT FROM T3 ) T2
 WHERE T1.CODE = T2.CODE(+)
  AND T2.DT  LIKE '201310' || '%'
 GROUP BY T1.CODE , T1.CODE_NM 
 
 

by 허접탱이 [2013.11.18 10:02:13]

우리집 아찌님...답변 감사합니다.
우선 제가 질문에 대해 설명을 잘 못 드린거 같습니다.
테이블 B와 C의 서비스별 카운트를 모두 합쳐야 합니다.

by 우리집아찌 [2013.11.18 10:11:41]
수정했습니다.

by 허접탱이 [2013.11.18 10:39:04]

우리집 아찌님.. 너무나 빠른 도움 감사드립니다.
수정된 쿼리로..한번 해보겠습니다.^^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입