안녕하세요, 월별 통계 관련해서 질문 좀 드리겠습니다..
user_id application_id queue_name yyyy mm slotTime
byeongwook.noh dcv dcv 2016 02 1622
byeongwook.noh dcv dcv 2016 02 724
byeongwook.noh dcv dcv 2016 02 74
byeongwook.noh dcv dcv 2016 02 50
byeongwook.noh dcv dcv 2016 02 84
byeongwook.noh dcv dcv 2016 02 306
byeongwook.noh dcv dcv 2016 02 521
byeongwook.noh dcv dcv 2016 02 49
changyoung.choi 160CFD 160CFD 2016 02 628704
changyoung.choi 128IH 128IH 2016 02 7554048
changyoung.choi 128IH 128IH 2016 02 16662096
changyoung.choi 160CFD 160CFD 2016 02 520768
changyoung.choi 512CFD 512CFD 2016 02 16256
위와 같은 데이터가 있습니다.(너무 많아서 일부만...)
user_id, application_id, queue_name 당 월별 slotTime 을 구해야해서
아래와 같이 rollup 했습니다.
SELECT nvl(userid,'-') userid, nvl(apps,'-') apps, nvl(queue,'-') queue, nvl(year,'-') year, nvl(month,'-') month, sum(slotTime) as slotTime FROM ( SELECT user_id as userid, application_id as apps, queue_name as queue, yyyy as year, mm as month, (TURNAROUND_TIME-WAIT_TIME)*cpu_num slotTime FROM REPORT_JOB WHERE yyyymmdd between '20150701' and '20160829' ) GROUP BY ROLLUP(userid, apps, queue, year, month);
근데 결과를
userid | apps | queue | 2015/01 | .... | 2016/01 |
user1 | app1 | queue1 | 100 | .... | 100 |
queue2 | 200 | .... | 200 |
이런 형태로 나타내고 싶은데 어떻게 쿼리를 바꿔야 할까요?
rollup으로 했을 때 값은 맞는 것 같지만..
필요없는 통계도 나오고해서 보기가 불편해서 바꾸고싶습니다ㅠ
ROLLUP 은 소계 구할 때 사용하구요.
지금 원하시는 형태는 PIVOT(행을 열로 변환) 입니다.
단 PIVOT 할 때 컬럼의 갯수와 값은 고정입니다.
가변 적용하려면 동적 쿼리 작성하셔야 합니다.
SELECT userid, apps, queue , SUM(DECODE(yyyy||mm, '201501', slotTime)) "201501" , SUM(DECODE(yyyy||mm, '201502', slotTime)) "201502" , SUM(DECODE(yyyy||mm, '201503', slotTime)) "201503" , ... FROM (...) GROUP BY userid, apps, queue ORDER BY userid, apps, queue ;