소계 및 총계 문의 드립니다. 0 4 2,006

by 사이비 [SQL Query] 소계 총계 ROLLUP GROUP [2020.07.21 19:36:51]


쿼리문의.PNG (26,492Bytes)

안녕하세요..

특정 조건에 맞는 소계 및 총계를 구하려고 하는데요.. ROLLUP 과 GROUPING 을 쓰면 될거 같은데..

하루 종일 해봤는데 잘 안되서 문의 드립니다. ㅠ

FLAG 기준으로 소계 및 합계를 구해야 되는건데요..아래처럼 만들려면 어떻게 해야 되는지요

첨부파일 이미지 확인 부탁드리겠습니다.

감사합니다.

 

by pajama [2020.07.21 21:21:25]

강좌를 참고해서 만들어보았습니다.. 잘못된 점이 있다면 알려주세요.

with t as (
select 'A' flag, 'AAA' category, 'A1' name, NULL range, 10 cnt, 2 code1, 0 code2 from dual
union all select 'A', 'BBB', 'A2', NULL , 2, 1, 1 from dual
union all select 'B', 'CCC', 'B1', '1-2', 3, 0, 0 from dual
union all select 'B', 'CCC', 'B1', '2-3', 1, 1, 0 from dual
union all select 'B', 'CCC', 'B2', '3-4', 2, 0, 0 from dual
union all select 'B', 'CCC', 'B3', '4-5', 1, 0, 0 from dual
union all select 'C', 'DDD', 'C1', '1-2', 4, 0, 2 from dual
union all select 'C', 'DDD', 'C1', '2-3', 1, 1, 1 from dual
union all select 'C', 'DDD', 'C2', '3-4', 1, 1, 0 from dual
)
select case when flag is null then '합계'
            when flag='A' and grouping(category)=1 and grouping(name)=1 and grouping(range)=1 then '소계1'
            when flag='B' and grouping(category)=1 and grouping(name)=1 and grouping(range)=1 then '소계2'
            when flag='C' and grouping(category)=1 and grouping(name)=1 and grouping(range)=1 then '소계3'
            else flag
       end flag, 
       category, 
       name, 
       range, 
       sum(cnt), 
       sum(code1), 
       sum(code2)
from t
group by rollup (flag, (category,name, range))


by 사이비 [2020.07.21 21:48:43]

늦은밤 답변 진심으로 감사합니다~ ^^;;

내일 아침에 해보도록 하겠습니다.

편안한밤되세여~ㅎ


by 마농 [2020.07.22 09:30:35]
WITH t AS 
(
SELECT 'A' flag, 'AAA' category, 'A1' name, NULL range, 10 cnt, 2 code1, 0 code2 FROM dual
UNION ALL SELECT 'A', 'BBB', 'A2', NULL , 2, 1, 1 FROM dual
UNION ALL SELECT 'B', 'CCC', 'B1', '1-2', 3, 0, 0 FROM dual
UNION ALL SELECT 'B', 'CCC', 'B1', '2-3', 1, 1, 0 FROM dual
UNION ALL SELECT 'B', 'CCC', 'B2', '3-4', 2, 0, 0 FROM dual
UNION ALL SELECT 'B', 'CCC', 'B3', '4-5', 1, 0, 0 FROM dual
UNION ALL SELECT 'C', 'DDD', 'C1', '1-2', 4, 0, 2 FROM dual
UNION ALL SELECT 'C', 'DDD', 'C1', '2-3', 1, 1, 1 FROM dual
UNION ALL SELECT 'C', 'DDD', 'C2', '3-4', 1, 1, 0 FROM dual
)
SELECT NVL(flag, '전체') flag
     , DECODE(GROUPING_ID(flag, name), 3, '합계', 1, '소계', 0, category) category
     , name
     , range
     , SUM(cnt) cnt
     , SUM(code1) code1
     , SUM(code2) code2
  FROM t
 GROUP BY ROLLUP(flag, (category, name, range))
;

 


by 사이비 [2020.07.22 18:36:22]

항상 눈팅만 하는데..진심..감사합니다~~^^;;

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