GROUP BY ROLLUP 공부하다가 질문 0 2 3,171

by JUSTWON [Oracle 기초] DECODE GROUP BY ROLLUP [2013.01.14 13:43:00]


http://blog.naver.com/zinskh?Redirect=Log&logNo=10115629859 

여기서 롤업 공부하고있디가 
아래쪽에 이 쿼리가 이해가 안되서요..;;
DECODE가 왜 쓰였는지 설명좀 해주실수있나요...ㅠ
롤업은 어느정도 알겠는데 DECODE여러개 섞어서 쓰는걸 이해를 못하겠어요..

  SELECT DECODE(부서그룹, 0, 부서
, DECODE(직책그룹, 0, 부서
, DECODE(이름그룹, 0, 부서
, '총합계'))) 부서
,DECODE(직책그룹, 0, 직책
, DECODE(이름그룹, 0, 직책
, DECODE(부서그룹, 1, ''
, '소계'))) 직책
,DECODE(이름그룹, 0, 이름
, DECODE(직책그룹, 1, ''
, '소계')) 이름
,연봉 연봉
FROM (SELECT 부서
,직책
,이름
,SUM(연봉) AS 연봉
,GROUPING(부서) 부서그룹
,GROUPING(직책) 직책그룹
,GROUPING(이름) 이름그룹
FROM SALARY
GROUP BY ROlLUP (부서, 직책, 이름));
by 손님 [2013.01.14 14:56:27]

그루핑 정보에따라 소계나 합계등등 글씨를 넣으려고 한것입니다

by 마농 [2013.01.14 15:17:40]
-- Grouping 을 이용해 자료를 구별하는거네요.
-- 여러 항목으로 Rollup 한 경우에는 Grouping 보다는 Grouping_ID 를 이용한다면
-- Decode 를 여러번 쓸 필요 없이 쿼리가 좀더 간결해 지겠지요.
SELECT DECODE(그룹ID, 7, '총계', 부서) 부서
     , DECODE(그룹ID, 3, '소계', 직책) 직책
     , DECODE(그룹ID, 1, '소계', 이름) 이름
     , 연봉
  FROM (SELECT 부서
             , 직책
             , 이름
             , SUM(연봉) AS 연봉
             , GROUPING_ID(부서, 직책, 이름) 그룹ID
          FROM SALARY 
         GROUP BY ROlLUP(부서, 직책, 이름)
        )
;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입