Sales 란 테이블에
UserNum Sales
98 1000
98 20000
135 50
135 1000
이렇게 데이터가 들어가 있습니다.
SELECT ( case WHEN sales_num in ( 98 ) THEN '영업1'
WHEN sales_num in ( 135) THEN '영업2'
WHEN sales_num in ( 98, 135) THEN '영업부'
end ) as deptTitle , sum (sales)
from Sales group by
( case WHEN sales_num in ( 98 ) THEN '영업1'
WHEN sales_num in ( 135) THEN '영업2'
WHEN sales_num in ( 98, 135) THEN '영업부'
end )
영업1 21000
영업2 1050
영업부 22050
UserNum 이 중복이 되고 원하는 조합으로 결과를 뽑고 싶은데요.... 안되네요.
Comment 7
-
이리
2013.09.10 12:04
-
이스트럭(강동운)
2013.09.10 13:04
안녕하세요~!
UNPIVOT을 사용해서 만들 수 있습니다.
감사합니다~
SELECT
부서명
, TotalSales
FROM
(
SELECT
SUM(CASE WHEN sales_num in ( 98 ) THEN Sales ELSE 0 END) AS '영업1'
, SUM(CASE WHEN sales_num in ( 135 ) THEN Sales ELSE 0 END) AS '영업2'
, SUM(CASE WHEN sales_num in ( 98,135 ) THEN Sales ELSE 0 END) AS '영업부'
FROM
(
SELECT 98 as sales_num, 1000 AS Sales
UNION ALL SELECT 98,20000
UNION ALL SELECT 135,50
UNION ALL SELECT 135,1000
) DEF
) DAT
UNPIVOT( TotalSales FOR 부서명 IN (영업1,영업2,영업부)) AS UNP
-
건우아빠
2013.09.10 13:47
동운씨 오랜만인듯 요즘 많이 바쁘나봐요...
전 group by grouping sets 에 요즘 필이 꼬치던데 ...
-
이스트럭(강동운)
2013.09.10 14:33
안녕하세요~^^
즘 mysql을 주로 하고 있다보니.. 커뮤니티 자주 안오게 되네요 ㅡㅠ..
쿼리는 .. 원론군이 잘짜죠 ^^;; 크크~~ 저도 늘 배워요~ㅎㅎㅎ
-
맨즈밤
2013.09.10 18:34
오옷..건우아빠님께서 말씀하신 group by grouping sets 저도 이거에 필이........
그전에는 ROLLUP 이나 더미테이블을 이용한 복제집계로 집계했었는데,,그냥 이게 가장 쓰기 쉽고 성능도 나쁘지 않더라구요.
실행계획만 잘 살펴보면 경우에 따라 ORDER BY 도 생략해도 되구요
-
minsouk
2013.09.10 20:53
order by 는 절대 제거하지 마셔요~
-
맨즈밤
2013.09.11 00:22
헉.. 조언 감사드립니다. 그리고 맞는 말씀입니다. ㅎㅎ . 가끔 속도에 대한 유혹이 강해서 그럴때가 있는데, 좀더 신중해야겠습니다.
영업부를 따로 빼서 UNION을 하는건 어떨까요?