순서 뽑기 0 4 4,267

by ahriow [SQLServer] [2016.01.26 19:52:57]



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

위와같은 결과값이 나오게 하고싶어요... 윈도우 함수를 써야할거 같긴 한데.. 

도움이 필요해요..

 

by 겸댕2후니 [2016.01.26 20:10:24]

소계로 순서가 결정되는건가요?


by ahriow [2016.01.26 20:13:32]

네. 소계의 매출액 또는 사용금액으로 순서가 결정되요


by 마농 [2016.01.26 20:45:53]
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
;

 


by ahriow [2016.01.27 09:24:42]

감사합니다!! 응용해서 해봐야겠어요!

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