表AA(keshi varchar(10),leixing varchar(10),shuliang int)keshi    leixing  shuliang 
-----    -------  --------
yi bao 10
er pian 12
er bao 5
er pian 5
er bao 15要求得到以下结果:
bao      pian     keshi    heji 
---      ----     -----    ----
10 NULL yi 10
20 17 er 37
请大家帮帮我!

解决方案 »

  1.   

    使用case when 很简单的
      

  2.   

    --如果leixing生活是固定的
    Select 
    bao = SUM(Case leixing When 'bao' Then shuliang Else 0 End),
    pian = SUM(Case leixing When 'pian' Then shuliang Else 0 End),
    keshi,
    SUM(shuliang) As heji
    From 
    AA
    Group By
    keshi
      

  3.   

    --如果leixing是固定的
    Select 
    bao = SUM(Case leixing When 'bao' Then shuliang Else 0 End),
    pian = SUM(Case leixing When 'pian' Then shuliang Else 0 End),
    keshi,
    SUM(shuliang) As heji
    From 
    AA
    Group By
    keshi
    --如果leixing不是固定的
    Declare @S Varchar(8000)
    Select @S = 'Select '
    Select @S = @S + leixing + ' = SUM(Case leixing When ''' + leixing + ''' Then shuliang Else 0 End),'
    From AA Group By leixing
    Select @S = @S + ' keshi, SUM(shuliang) As heji From AA Group By keshi'
    EXEC(@S)
      

  4.   

    select sum(shuliang) as a1 ,keshi, leixing into #t1 from AA group by  keshi,leixingselect case when keshi='bao' then a1 else 0 end as bao,case when keshi='pian' then a1 else 0 end as pian,keshi #t2 from #t1select sum(bao),sum(pian),keshi,sum(bao)+sum(pian) from #t2 group by keshi