Select vbh,A=(case when gzlcb='A' then sum(JE) else 0 end),
           B=(case when gzlcb='B' then sum(JE) else 0 end),
           ........................
from table 
group by vbh,gzlcb

解决方案 »

  1.   

    Create table #test (vBH char(10),GZLB char(10),JE int)
    go
    insert #test values('001','A',100)
    insert #test values('001','B',150)
    insert #test values('001','C',110)
    insert #test values('002','A',99)
    insert #test values('002','B',180)
    insert #test values('002','C',150)
    insert #test values('003','A',160)
    insert #test values('003','B',170)
    insert #test values('003','C',130)
    insert #test values('004','E',99)
    insert #test values('004','F',180)
    insert #test values('004','C',150)
    GO
    declare @sql varchar(8000)
    set @sql = 'select vBH'
    select @sql = @sql + ',sum(case GZLB when '''+GZLB+''' then JE end) ['+GZLB+']'
     from (select distinct GZLB from #test) as aselect @sql = @sql+' from #test group by vBH'
    select @sql
    exec(@sql)
      

  2.   

    樓上,請注意GZLB中的字段是動態的
      

  3.   

    请楼主看清楚点,我用的是动态语句,符合GZLB字段是动态的情况,你可以用你的数据进行测试一下就知道了!
      

  4.   

    wzh1215(懒猫) 
    楼主可能没明白Create table #test (vBH char(10),GZLB char(10),JE int)
    go
    insert #test values('001','A',100)
    insert #test values('001','B',150)
    insert #test values('001','C',110)
    insert #test values('002','A',99)
    insert #test values('002','B',180)
    insert #test values('002','C',150)
    insert #test values('003','A',160)
    insert #test values('003','B',170)
    insert #test values('003','C',130)
    insert #test values('004','E',99)
    insert #test values('004','F',180)
    insert #test values('004','C',150)
    GO
    这个是什么,是测试数据啊。