안녕하세요,
요즘 집계함수를 본의아니게 엄청나게 공부하고 있습니다..
구루비 덕분에 GROUPONG SETS..ROLLUP 등등 많이 배웠습니다 요즘 (__)
간만에 글을 쓰네요. 다름이 아니라
WITH TEMP AS (
select 9 AS NO,'CCT' AS NAME, '10000' AS MONEY FROM DUAL UNION ALL
select 13 AS NO,'BAC' AS NAME, '20000' AS MONEY FROM DUAL UNION ALL
select 15 AS NO,'SCX' AS NAME, '40000' AS MONEY FROM DUAL UNION ALL
select 14 AS NO,'WDF' AS NAME, '50000' AS MONEY FROM DUAL UNION ALL
select 22 AS NO,'HFS' AS NAME, '70000' AS MONEY FROM DUAL
) SELECT * FROM TEMP;
위와 같은 데이터가 있을 때, (총 5개의 행이죠)
예를들어 2개씩 묶어서 소계를 보여주고, 총계도 같이 보여주고 싶다 하면 쿼리를 어떻게 짜야 할까요?
2개씩 묶을수도 있고, 3개씩 묶을수도 있고...가변적 입니다.
지금은 group 묶어주는 column을 따로 생성해주는 function을 만들어서 grouping 하는 방식으로 접근 중에 있었습니다.
답변 감사합니다.
WITH temp AS ( SELECT 9 no, 'CCT' name, 10000 money FROM dual UNION ALL SELECT 13, 'BAC', 20000 FROM dual UNION ALL SELECT 15, 'SCX', 40000 FROM dual UNION ALL SELECT 14, 'WDF', 50000 FROM dual UNION ALL SELECT 22, 'HFS', 70000 FROM dual ) SELECT no , DECODE(GROUPING_ID(gb, no), 0, name, 1, '소계', 3, '총계') name , SUM(money) money FROM (SELECT no, name, money , CEIL(ROW_NUMBER() OVER(ORDER BY no) / :n) gb FROM temp ) GROUP BY ROLLUP(gb, (no, name)) ORDER BY gb, no ;