如何将以下一表1转换成表2,行列转换
如何将以下一表1转换成表2,行列转换
客户名称月份月销售额
王五1100
王五280
王五385
王五490
王五5105
王五6110
李四1
李四2
李四3
李四450
李四555
李四660
李四7
李四880
李四9 10
表2
客户 1月销售额 2月销售额 3月销售额 4月销售额 5月销售额 6月销售额 7月销售额 8月销售额 9月销售额 合计
王五100 80 85 90 105 110 570
李四 50 55 60 80 100 345
[解决办法]
select 客户 ,
sum(case when 月份=1 then 月销售额 else 0 end) as 1月销售额,
sum(case when 月份=2 then 月销售额 else 0 end) as 2月销售额,
sum(case when 月份=3 then 月销售额 else 0 end) as 3月销售额,
...
sum(case when 月份=12 then 月销售额 else 0 end) as 12月销售额,
sum(月销售额) as 总销售额,
from tb
group by 客户
create table #tb(客户名称 varchar(10), 月份 int,月销售额 numeric(12,2))
insert into #tb
select '王五',1,100
union all select '王五',2,80
union all select '王五',3,85
union all select '王五',4,90
union all select '王五',5,105
union all select '王五',6,110
union all select '李四',1,NULL
union all select '李四',2,NULL
union all select '李四',3,NULL
union all select '李四',4,50
union all select '李四',5,55
union all select '李四',6,60
union all select '李四',7,NULL
union all select '李四',8,80
union all select '李四',9,10
--方法二(一般用在sql server2000)
declare @sql varchar(8000)
set @sql=''
select @sql=@sql + ',['+rtrim(月份)+'月销售额]=sum(case rtrim(月份) when '''+rtrim(月份)+''' then 月销售额 end)'
from #tb group by rtrim(月份)
exec('select 客户名称'+@sql+',sum(月销售额) as 合计 from #tb group by 客户名称')
drop table #tb
/*
客户名称1月销售额2月销售额3月销售额4月销售额5月销售额6月销售额7月销售额8月销售额9月销售额合计
李四NULLNULLNULL50.0055.0060.00NULL80.0010.00255.00
王五100.0080.0085.0090.00105.00110.00NULLNULLNULL570.00
*/