try:
declare @sql varchar(8000)
set @sql = 'select goodsid'
select @sql = @sql + ',sum(case storeid when '''+storeid+''' then quantity end) ['+storeid+']'
from (select distinct storeid from onhand) as a
select @sql = @sql+' from onhand group by goodsid'
exec(@sql)
declare @sql varchar(8000)
set @sql = 'select goodsid'
select @sql = @sql + ',sum(case storeid when '''+storeid+''' then quantity end) ['+storeid+']'
from (select distinct storeid from onhand) as a
select @sql = @sql+' from onhand group by goodsid'
exec(@sql)
declare @sqlhead varchar(8000),@sqlend varchar(8000)
,@sql1 varchar(8000),@sql2 varchar(8000),@sql3 varchar(8000),@sql4 varchar(8000)
,@i int,@ic varchar(20)--生成数据处理临时表
select id=identity(int,0,1),gid=0
,a=',['+name+']=sum(case goodsid when '
+cast(goodsid as varchar)+' then quantity else 0 end)'
into # from goods--判断需要多少个变量来处理
select @i=max(len(a)) from #
set @i=7800/@i--分组临时表
update # set gid=id/@i
select @i=max(gid) from #--生成数据处理语句
select @sqlhead='''select 商品名称=a.name'''
,@sqlend=''' from store a inner join onhand b on a.storeid=b.storeid group by a.name'''
,@sql1='',@sql2='select ',@sql3='',@sql4=''while @i>=0
select @ic=cast(@i as varchar),@i=@i-1
,@sql1='@'+@ic+' varchar(8000),'+@sql1
,@sql2=@sql2+'@'+@ic+'='''','
,@sql3='select @'+@ic+'=@'+@ic+'+a from # where gid='+@ic
+char(13)+@sql3
,@sql4=@sql4+',@'+@icselect @sql1='declare '+left(@sql1,len(@sql1)-1)+char(13)
,@sql2=left(@sql2,len(@sql2)-1)+char(13)
,@sql3=left(@sql3,len(@sql3)-1)
,@sql4=substring(@sql4,2,8000)--执行
exec( @sql1+@sql2+@sql3+'
exec('+@sqlhead+'+'+@sql4+'+'+@sqlend+')'
)--删除临时表
drop table #
http://expert.csdn.net/Expert/topic/2303/2303308.xml?temp=.9494745