메뉴 건너뛰기

SAP 한국 커뮤니티

유용한 sql 팁(rollup)

이동암 2007.04.19 14:21 조회 수 : 7104 추천:54

ORACLE 8.1.5 이전 버전에서는 SUBTOTAL GRAND TOTAL을 구하기 위해 아래의 SQL과 같이 COPY_T를 이용하여 복제를 한 후 SUBTOTAL GRAND TOTAL을 구하는 방법을 사용하였다.


select /*+ ordered */
        decode(no,1,dname,2,dname,'total'),
        decode(no,1,job,2,'subtotal'),
        decode(no,1,empno),
        sum(sal)
  from (
        select /*+ ordered use_nl(emp dept) */
               empno,ename,hiredate,dname,job,sal
          from emp , dept
         where dept.deptno = emp.deptno ) a,copy_t b
 where no <= 3
 group by decode(no,1,dname,2,dname,'Grand total'),
          decode(no,1,job,2,'Subtotal'),
          decode(no,1,empno)


그런데 ORACLE 8.1.5부터 ROLLUP CUBE가 지원되면서 SUBTOTAL GRAND TOTAL을 구하기가 훨씬 쉬워졌다.그런데 ROLLUP CUBE는 상위그룹으로만 집계를 하는데는 용이하지만 세부내역과 함께 SUB TOTAL GRAND TOTAL을 보고자 할 경우에는 약간의 문제가 생긴다. 다음은 이러한 경우에 ROLLUP을 이용하여 SUBTOTAL GRAND TOTAL을 구하고 세부내역을 나타내기 위한 사례이다.


SELECT DECODE(GROUPING(dname), 1, 'All Departments',dname) AS dname,
       DECODE(GROUPING(job), 1, 'All Jobs', job) AS job,
       DECODE(GROUPING(empno), 0, empno) AS empno,
       SUM(sal)
  FROM EMP, DEPT
 WHERE DEPT.DEPTNO = EMP.DEPTNO
GROUP BY rollup( DNAME, JOB,empno)
having grouping(empno) = 0 or grouping(job) = 1 or grouping(dname) = 1


ROLLUP을 이용하면 데이터 복제에 대한 부담과 GROUP BY에 대한 부담이 줄어들어 대상 건수가 많으면 많을수록 효과적이다.


* e-abap님에 의해서 게시물 이동되었습니다 (2007-04-19 14:31)
번호 제목 글쓴이 날짜 조회 수
407 팝업창이나 서브스크린 디버깅을 쉽게 할 수 있어요 [17] 김창훈 2007.08.08 5070
406 HELP를 WEB으로 접속하려면,,, 이렇게 하세요 [8] 김창훈 2007.08.08 3847
405 간단한 ALV Report를 생성해주는 사이트 [2] 홍성현 2007.08.09 4018
404 SAP에서 바코드 인쇄하기 [1] 홍성현 2007.08.09 5303
403 Python과 SAP RFC 통신 [3] 홍성현 2007.08.09 5808
402 사용자별 Upload & Download 기본값 [1] 홍성현 2007.08.09 3661
401 ABAP에서 웹브라우져 호출 홍성현 2007.08.09 8321
400 SAP Icon 출력 [3] 홍성현 2007.08.09 6538
399 ABAP System Fields 홍성현 2007.08.09 3931
398 4.6에서 ALV 필드 변경 안될때 버퍼 지우는 방법 신종철 2007.08.10 4780
397 ALV 중간 집계 하기 [3] 신종철 2007.08.10 4780
396 텍스트반영시(자재명,저장위치명 기타등등) 속도개선 방법 [6] 김창훈 2007.08.14 5970
395 속도개선하기....INDEX를 이렇게도 쓰네용~~ [9] 김창훈 2007.08.14 5375
394 AT 구문에 대한 설명입니다. [6] 김창훈 2007.08.16 5734
393 플랜트로 회사코드와 기준통화 찾기 [8] file 김창훈 2007.08.16 5596
392 엑셀 65000 라인초과시 사용 유틸 [5] file GG 2007.08.19 5296
391 ABAP 문법 1st [13] file 아일락 2007.08.20 4555
390 ABAP 문법 2nd [8] file 아일락 2007.08.20 3914
389 조회조건 동적으로 보이기 [5] 신종철™ 2007.08.20 4771
388 스페이스를 2자리로 먹을때 1자리로 먹게 바꾸기 [1] 신종철™ 2007.08.20 3952