WITH T AS ( SELECT '삼성' company, '전자' type2 , 10000 price , 2000 used UNION ALL SELECT '삼성' company, '전기' type2 , 20000 price , 9000 used UNION ALL SELECT '삼성' company, '물산' type2 , 22000 price , 4000 used UNION ALL SELECT '엘지' company, '전자' type2 , 15000 price , 6000 used UNION ALL SELECT '엘지' company, '광고' type2 , 5000 price , 13000 used UNION ALL SELECT '롯데' company, '타워' type2 , 8000 price , 50000 used ) SELECT CASE GROUPING(t.company) + GROUPING(t.type2) WHEN 2 THEN '합계' WHEN 1 THEN MAX(t.company) +' 소계' WHEN 0 THEN MAX(t.company) END 회사, CASE GROUPING(t.company) + GROUPING(t.type2) WHEN 2 THEN '' WHEN 1 THEN '' WHEN 0 THEN MAX(t.type2) END 부서, SUM(t.price) 매출액, SUM(t.used) 사용금액 FROM t GROUP BY t.company, t.type2 WITH ROLLUP
위 값을 실행시키면
회사 | 부서 | 매출액 | 사용금액 |
롯데 | 타워 | 8000 | 50000 |
롯데 소계 | 8000 | 50000 | |
삼성 | 물산 | 22000 | 4000 |
삼성 | 전기 | 20000 | 9000 |
삼성 | 전자 | 10000 | 2000 |
삼성 소계 | 52000 | 15000 | |
엘지 | 광고 | 5000 | 13000 |
엘지 | 전자 | 15000 | 6000 |
엘지 소계 | 20000 | 19000 | |
합계 | 80000 | 84000 |
위와 같은 값이 나오는데요.
각 회사의 매출액별(desc), 사용금액별(desc) 순서값을 가져오고싶습니다.(총합계는 맨 아래로)
회사 | 부서 | 매출액 | 사용금액 | 매출액순서 | 사용금액순서 |
롯데 | 타워 | 8000 | 50000 | 3 | 1 |
롯데 소계 | 8000 | 50000 | 3 | 1 | |
삼성 | 물산 | 22000 | 4000 | 1 | 3 |
삼성 | 전기 | 20000 | 9000 | 1 | 3 |
삼성 | 전자 | 10000 | 2000 | 1 | 3 |
삼성 소계 | 52000 | 15000 | 1 | 3 | |
엘지 | 광고 | 5000 | 13000 | 2 | 2 |
엘지 | 전자 | 15000 | 6000 | 2 | 2 |
엘지 소계 | 20000 | 19000 | 2 | 2 | |
합계 | 80000 | 84000 | 999 | 999 |
위와같은 결과값이 나오게 하고싶어요... 윈도우 함수를 써야할거 같긴 한데..
도움이 필요해요..
SELECT CASE g3 WHEN 0 THEN company WHEN 1 THEN company + ' 소계' WHEN 3 THEN '합계' END 회사 , ISNULL(type2, '') 부서 , 매출액 , 사용금액 , CASE g1 WHEN 1 THEN 999 ELSE DENSE_RANK() OVER(PARTITION BY g1 ORDER BY x DESC) END 매출액순서 , CASE g1 WHEN 1 THEN 999 ELSE DENSE_RANK() OVER(PARTITION BY g1 ORDER BY y DESC) END 사용금액순서 FROM (SELECT t.company , t.type2 , GROUPING(t.company) g1 , GROUPING(t.type2 ) g2 , GROUPING_ID(t.company, t.type2) g3 , SUM(t.price) 매출액 , SUM(t.used) 사용금액 , SUM(SUM(t.price)) OVER(PARTITION BY t.company) x , SUM(SUM(t.used )) OVER(PARTITION BY t.company) y FROM t GROUP BY t.company, t.type2 WITH ROLLUP ) a ORDER BY g1, company, g2, type2 ;