create table t(分公司 varchar(20),产品类型 varchar(20),数据 int)
insert into t select '北京公司','山地车',111
insert into t select '北京公司','电动车',111
insert into t select '北京公司','普通车',111
insert into t select '南京公司','山地车',111
insert into t select '南京公司','电动车',111
insert into t select '南京公司','普通车',111declare @s varchar(8000)
set @s='select 分公司'
select @s=@s+','+产品类型+'=sum(case 产品类型 when '''+产品类型+''' then 数据 else 0 end )' 
from t group by 产品类型 order by 产品类型
set @s=@s+' from t group by 分公司 order by 分公司'
exec(@s)/*
分公司    电动车  普通车  山地车
--------  ------  ------  -------- 
北京公司  111     111     111
南京公司  111     111     111
*/drop table t

解决方案 »

  1.   

    转回来也很容易,需要借助系统表syscolumns:
    -------------------------------------------------------------------------------------------------------------------------
    create table t(分公司 varchar(20),电动车 int,普通车 int,山地车 int)
    insert into t select '北京公司',111,112,113
    insert into t select '南京公司',101,102,103
    insert into t select '上海公司',121,122,123declare @s varchar(8000)
    set @s=''
    select @s=@s+' union all select 分公司,产品类型='''+name+''',数据='+name+' from t ' 
    from syscolumns where id=object_id('t') and name!='分公司' order by colid
    set @s=stuff(@s,1,11,'')+' order by 分公司,产品类型'
    exec(@s)/*
    分公司     产品类型  数据
    ---------- --------  -----
    北京公司   电动车    111
    北京公司   普通车    112
    北京公司   山地车    113
    南京公司   电动车    101
    南京公司   普通车    102
    南京公司   山地车    103
    上海公司   电动车    121
    上海公司   普通车    122
    上海公司   山地车    123
    */drop table t