如何将以下一表1转换成表2,行列转换客户名称 月份 月销售额 
王五 1 100
王五 2 80
王五 3 85
王五 4 90
王五 5 105
王五 6 110
李四 1
李四 2
李四 3
李四 4 50
李四 5 55
李四 6 60
李四 7
李四 8 80
李四 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

解决方案 »

  1.   

    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 客户
      

  2.   

    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月销售额 合计
    李四 NULL NULL NULL 50.00 55.00 60.00 NULL 80.00 10.00 255.00
    王五 100.00 80.00 85.00 90.00 105.00 110.00 NULL NULL NULL 570.00
    */楼主最好合计不对