http://expert.csdn.net/Expert/topic/2440/2440306.xml?temp=.6941645
 [交流]行列转换

解决方案 »

  1.   


    declare @sql varchar(8000)
    set @sql = 'select 编号'
    select @sql = @sql + ',sum(case 序号 when '''+cast(序号 as varchar)+''' then cj end) ['+cast(序号 as varchar)+']'
     from (select distinct 序号 from 表1) as a
    select @sql = @sql+' from 表1 group by 编号'
    exec(@sql)
      

  2.   

    declare @s varchar(8000)
    set @s=''
    select @s=@s+',[序号'+序号+']=sum(case 序号 when '+序号+' then 值 else 0 end)'
    from(select distinct 序号=cast(序号 as varchar) from 表1) a--如果表2已经存在
    exec('insert into 表2 select 编号'+@s+' from 表1 grou by 编号')--如果表2不存在
    exec('select 编号'+@s+' into 表2 from 表1 grou by 编号')
      

  3.   

    --上面写错了一个关键字,改一下:
    declare @s varchar(8000)
    set @s=''
    select @s=@s+',[序号'+序号+']=sum(case 序号 when '+序号+' then 值 else 0 end)'
    from(select distinct 序号=cast(序号 as varchar) from 表1) a--如果表2已经存在
    exec('insert into 表2 select 编号'+@s+' from 表1 group by 编号')--如果表2不存在
    exec('select 编号'+@s+' into 表2 from 表1 group by 编号')
      

  4.   

    --下面是查询得到结果的例子:--测试数据
    create table 表1(编号 varchar(1),值 int,序号 int)
    insert into 表1
    select 'B',100,1
    union all select 'B',150,2
    union all select 'B',160,3
    union all select 'C',210,1
    union all select 'C',130,2--查询处理
    declare @s varchar(8000)
    set @s=''
    select @s=@s+',[序号'+序号+']=sum(case 序号 when '+序号+' then 值 else 0 end)'
    from(select distinct 序号=cast(序号 as varchar) from 表1) a
    exec('select 编号'+@s+' from 表1 group by 编号')
    go--删除测试表
    drop table 表1
    go/*--测试结果编号   序号1         序号2         序号3         
    ---- ----------- ----------- ----------- 
    B    100         150         160
    C    210         130         0--*/