ROLLUP 문의 드립니다. 0 5 1,007

by 김주환 [2015.10.29 10:23:20]


SELECT ES.A,
       ES.B,
       ES.C,
       ES.D,
       SUM(A1) AS A1
      
  FROM EX_SOURCE ES
 GROUP BY ROLLUP(ES.A, ES.B, ES.C, ES.D);

ROLLUP 소스를 위와 같이 작성한다면 결과가 아래와 같이 나옵니다.

A B C D A1
1 A30 037 V1 100
1 A30 037 V2 200
1 A30 037   300
1 A30 039 V1 300
1 A30 039 V2 400
1 A30 039   700
1 A30     1000
1      

1000

제가 원하는 소계도 위에 나와야 합니다... 같이 구현하려면 이건 어떻게 GROUP BY, ROLLUP 을 해야 구현되나요? 몹시 고민됩니다. 아무리 바꿔도 ..

1 A30   V1 400
1 A30   V2 600

 

by atumlee [2015.10.29 10:48:30]
SELECT  ES.A, ES.B, ES.C, ES.D, SUM(A1) AS A1
FROM    EX_SOURCE ES
GROUP BY ROLLUP(ES.A, ES.B, ES.D, ES.C);

by 김주환 [2015.10.29 10:53:51]

제가 글을 잘 못 썼네요.. 위에 쿼리는 그대로 나와야 합니다..ㅠ 아래 원하는 소계도 추가되도록..ㅠ


by 김주환 [2015.10.29 11:03:13]

아..해결했습니다.

GROUP BY ROLLUP(ES.A, ES.B, ES.C), ROLLUP(ES.D) 하면 되네요.ㅠㅜ


by 창조의날개 [2015.10.29 11:13:05]

WITH EX_SOURCE (A,	B,	C,	D,	A1) AS (
    SELECT 1,	'A30',	'037',	'V1',	100 FROM DUAL UNION ALL
    SELECT 1,	'A30',	'037',	'V2',	200 FROM DUAL UNION ALL
    SELECT 1,	'A30',	'039',	'V1',	300 FROM DUAL UNION ALL
    SELECT 1,	'A30',	'039',	'V2',	400 FROM DUAL
)
SELECT  ES.A, ES.B, ES.C, ES.D, SUM(A1) AS A1
FROM    EX_SOURCE ES
GROUP BY ROLLUP((ES.A, ES.B, ES.C)), ROLLUP(ES.D)
ORDER BY A,B,C,D
;

 


by atumlee [2015.10.29 11:33:45]

이런 상황이라면 ROLLUP 보다는 GROUPING SETS 가 더 쉬울 것 같습니다.

SELECT  ES.A, ES.B, ES.C, ES.D, SUM(A1) AS A1
FROM    EX_SOURCE ES
GROUP BY GROUPING SETS((ES.A, ES.B, ES.C, ES.D), (ES.A, ES.B, ES.C), (ES.A, ES.B, ES.D), (ES.A, ES.B), ES.A, NULL)
ORDER BY 1, 2, 3, 4;

 

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