select a.goods,
    (select sum(case when storage='01' then qty else 0 end) from table where goods=a.goods) 01,
    (select sum(case when storage='02' then qty else 0 end) from table where goods=a.goods) 01,
from 
(select goods from table group by goods)a

解决方案 »

  1.   

    select goods ,sum(case storage when '01' then 1 else 0 end ) ,
           sum(case storage when '02' then 1 else 0 end )
      
    from table1 
    group by goods
      

  2.   

    select goods ,(select qty from Utable where storage='01' and goods= T.goods) as qty01,(select qty from Utable where storage='02' and goods= T.goods) as qty02
    from
    (select distinct goods from Utable) as T
      

  3.   

    要是我的表里有几百条记录,这样写肯定不行呀!
    难道我要把所有的Storage里的值都列出来吗?
      

  4.   

    select goods,sum(case storage when '01' then qty else 0 end) '01',
    sum(case storage when '02' then qty else 0 end) '02'
    from #t
    group by goodsor:declare @sql varchar(8000)
    set @sql = 'select goods,'select @sql = @sql + 'sum(case storage when '''+storage+''' 
                              then qty else 0 end) as ['+storage+'],'
      from (select distinct storage from #t) aselect @sql = left(@sql,len(@sql)-1) + ' from #t group by goods'exec(@sql)