안녕하세요.
매번 글읽으면서 많은 도움을 받고 있습니다. 오늘은 안풀리는 문제가 있어서 도움을 청합니다. ^^
ROLLUP을 이용해서 소계, 합계를 구한 쿼리를 작성중입니다.
근데, 일반적으로 소계, 합계를 구하는건 상관이 없는데,
일부 값만 소계를 나눠어 소계합계를 구해야됩니다.
예를 들어
WITH TEMP AS
(
SELECT '서울' CENTER, '개발1팀' TEAM, 1000 AMT FROM DUAL UNION ALL
SELECT '서울' CENTER, '개발1팀' TEAM, 1000 AMT FROM DUAL UNION ALL
SELECT '서울' CENTER, '개발2팀' TEAM, 1000 AMT FROM DUAL UNION ALL
SELECT '제주' CENTER, '개발1팀' TEAM, 1000 AMT FROM DUAL UNION ALL
SELECT '제주' CENTER, '개발1팀' TEAM, 1300 AMT FROM DUAL UNION ALL
SELECT '제주' CENTER, '개발2팀' TEAM, 1500 AMT FROM DUAL UNION ALL
SELECT '대전' CENTER, '개발1팀' TEAM, 1000 AMT FROM DUAL UNION ALL
SELECT '대전' CENTER, '개발2팀' TEAM, 1000 AMT FROM DUAL UNION ALL
SELECT '대전' CENTER, '개발2팀' TEAM, 1000 AMT FROM DUAL UNION ALL
SELECT '대전' CENTER, '개발2팀' TEAM, 1000 AMT FROM DUAL UNION ALL
SELECT '대전' CENTER, '업무1팀' TEAM, 1000 AMT FROM DUAL UNION ALL
SELECT '대전' CENTER, '업무2팀' TEAM, 1300 AMT FROM DUAL UNION ALL
SELECT '대전' CENTER, '업무2팀' TEAM, 1400 AMT FROM DUAL
)
SELECT DECODE(GROUPING(CENTER), 0, CENTER, '합계') CENTER
,DECODE(GROUPING_ID(CENTER,TEAM),0,TEAM,1,'소계','') TEAM
,SUM(AMT) FROM TEMP
GROUP BY ROLLUP(CENTER, TEAM);
이렇게 했을때 결과는 다음과 같습니다.
대전 |
개발1팀 |
1000 |
대전 |
개발2팀 |
3000 |
대전 |
업무1팀 |
1000 |
대전 |
업무2팀 |
2700 |
대전 |
소계 |
7700 |
서울 |
개발1팀 |
2000 |
서울 |
개발2팀 |
1000 |
서울 |
소계 |
3000 |
제주 |
개발1팀 |
2300 |
제주 |
개발2팀 |
1500 |
제주 |
소계 |
3800 |
합계 |
|
14500 |
이결과를 아래와 같이 대전만 팀별로 소계를 더 내고 싶습니다.
어떻게 해야될까요. 고수님들 도와주세요~
대전 |
개발1팀 |
1000 |
대전 |
개발2팀 |
3000 |
대전 |
개발팀소계 |
4000 |
대전 |
업무1팀 |
1000 |
대전 |
업무2팀 |
2700 |
대전 |
업무팀소계 |
3700 |
대전 |
팀소계 |
7700 |
서울 |
개발1팀 |
2000 |
서울 |
개발2팀 |
1000 |
서울 |
소계 |
3000 |
제주 |
개발1팀 |
2300 |
제주 |
개발2팀 |
1500 |
제주 |
소계 |
3800 |
합계 |
|
14500 |
|