日期:2014-05-18  浏览次数:20455 次

简单的行转列,请高手指点,急
数据结构如下:
公司名称   科目代码     科目名称   年度   期间                 余额
a公司 1001 现金 2007 1 6056.0400
a公司 1001 现金 2007 2 585.9500
a公司 1001 现金 2007 3 1613.9600
a公司 1001 现金 2007 4 8047.0800
a公司 1001 现金 2007 5 7801.4600
b公司 1001 现金 2007 1 1301.5800
b公司 1001 现金 2007 2 1241.1200
b公司 1001 现金 2007 3 941.0500
b公司 1001 现金 2007 4 2117.1500
b公司 1001 现金 2007 5 832.5200
要求变成如下的样式:
公司名称   科目代码     科目名称   1月                   2月                     3月             4月         5月  
a公司         1001             现金           6056.0400     585.9500       1613.9600     8047.0800     7801.4600
..................

------解决方案--------------------
select
公司名称 ,科目代码, 科目名称 ,
case sum(when 期间=1 then 余额 else 0 end)as [1月],
case sum(when 期间=2 then 余额 else 0 end)as [2月],
case sum(when 期间=3 then 余额 else 0 end)as [3月],
case sum(when 期间=4 then 余额 else 0 end)as [4月],
case sum(when 期间=5 then 余额 else 0 end)as [5月],
case sum(when 期间=6 then 余额 else 0 end)as [6月],
case sum(when 期间=7 then 余额 else 0 end)as [7月],
case sum(when 期间=8 then 余额 else 0 end)as [8月],
case sum(when 期间=9 then 余额 else 0 end)as [9月],
case sum(when 期间=10 then 余额 else 0 end)as [10月],
case sum(when 期间=11 then 余额 else 0 end)as [11月],
case sum(when 期间=12 then 余额 else 0 end)as [12月]
from 表
group by 公司名称 ,科目代码, 科目名称
------解决方案--------------------
select
公司名称 ,科目代码, 科目名称 ,
sum(case when 期间=1 then 余额 else 0 end) [1月],
sum(case when 期间=2 then 余额 else 0 end) [2月],
sum(case when 期间=3 then 余额 else 0 end) [3月],
sum(case when 期间=4 then 余额 else 0 end) [4月],
sum(case when 期间=5 then 余额 else 0 end) [5月],
sum(case when 期间=6 then 余额 else 0 end) [6月],
sum(case when 期间=7 then 余额 else 0 end) [7月],
sum(case when 期间=8 then 余额 else 0 end) [8月],
sum(case when 期间=9 then 余额 else 0 end) [9月],
sum(case when 期间=10 then 余额 else 0 end) [10月],
sum(case when 期间=11 then 余额 else 0 end) [11月],
sum(case when 期间=12 then 余额 else 0 end) [12月]
from 表
group by 公司名称 ,科目代码, 科目名称