tblCompanyData
회사 | 갯수 | 년도 |
A | 1 | 2006 |
A | 8 | 2007 |
A | 3 | 1900 |
B | 1 | 2007 |
B | 1 | 2008 |
B | 1 | 2010 |
B | 8 | 2012 |
C | 1 | 2006 |
C | 13 | 2007 |
C | 17 | 2008 |
C | 2 | 2009 |
C | 1 | 2010 |
C | 11 | 2011 |
D | 1 | 2011 |
D | 42 | 2012 |
E | 1 | 2009 |
E | 1 | 2010 |
E | 1 | 2011 |
E | 3 | 1900 |
위와 같은 테이블이 있을 경우 현재 년도 포함하여 4년 전 데이터까지 출력하려고 합니다.
현재 2012년이니 2009년도데이터까지 출력을 하려고하고, 출력하고 싶은 형태는
회사 | 합계 | 2012 | 2011 | 2010 | 2009 | 기타 |
A | 12 | 0 | 0 | 0 | 0 | 12 |
B | 11 | 8 | 0 | 1 | 0 | 2 |
C | 45 | 0 | 11 | 1 | 2 | 31 |
D | 43 | 42 | 1 | 0 | 0 | 0 |
E | 4 | 0 | 1 | 0 | 0 | 3 |
위와 같이 출력하고 싶습니다.
아무리 생각해도 머리가 돌아가질 않네요;;
임시테이블을 사용하여 루프를 돌아서 계산 후 넣을까도 했지만, 좀 다른 방법이 있지 않을까해서 이렇게 질문 올립니다.
좋은 답변 부탁드립니다.
Comment 3
-
양호철
2012.04.19 14:45
-
블랙조
2012.04.20 11:02
with cte(회사, 갯수, 년도)
as (
select 'A', '1', '2006' union all
select 'A','8','2007' union all
select 'A','3','1900' union all
select 'B', '1','2007' union all
select 'B','1','2008' union all
select 'B','1','2010' union all
select 'B','8','2012' union all
select 'C','1','2006' union all
select 'C','13','2007' union all
select 'C','17','2008' union all
select 'C','2','2009' union all
select 'C','1','2010' union all
select 'C','11','2011' union all
select 'D', '1', '2011' union all
select 'D', '42', '2012' union all
select 'E', '1', '2009' union all
select 'E', '1', '2010' union all
select 'E', '1', '2011' union all
select 'E', '3', '1900'
)
select
회사,
SUM(cast(갯수 as int)) as [합계],
sum(case when 년도 = 2012 then 갯수 else 0 end) as [2012] ,
sum(case when 년도 = 2011 then 갯수 else 0 end) as [2011] ,
sum(case when 년도 = 2010 then 갯수 else 0 end) as [2010] ,
sum(case when 년도 = 2009 then 갯수 else 0 end) as [2009] ,
SUM(CASE WHEN 년도 NOT IN (2012, 2011, 2010, 2009) THEN 갯수 ELSE 0 END) AS [기타]
from cte
group by 회사
-
진윤호
2012.04.20 11:11
Tip & 강좌 게시판에 다이나믹 pivot에 대한 내용이 있습니다.
참고해 보세요
http://www.sqler.com/?document_srl=133535&mid=bSQLQA&rnd=488573#comment_488573


select 문의 pivot 연산자를 사용해보세요.
http://msdn.microsoft.com/ko-kr/library/ms177410.aspx