--生成数据处理临时表
select id=identity(int,0,1),gid=0
,a=',['+field1+']=sum(case field1 when '''+field1+''' then field3 else 0 end)'
into # from(select distinct field1 from 表)a
--判断需要多少个变量来处理
select @i=max(len(a)) from #
set @i=3800/@i
--分组临时表
update # set gid=id/@i
select @i=max(gid) from #
--生成数据处理语句
select @sqlhead='''select field2'''
,@sqlend=''' from 表 group by field2'''
,@sql1='',@sql2='select ',@sql3='',@sql4=''
while @i>=0
select @ic=cast(@i as varchar),@i=@i-1
,@sql1='@'+@ic+' nvarchar(4000),'+@sql1
,@sql2=@sql2+'@'+@ic+'='''','
,@sql3='select @'+@ic+'=@'+@ic+'+a from # where gid='+@ic
+char(13)+@sql3
,@sql4=@sql4+',@'+@ic
--测试数据
create table 表(field1 varchar(10),field2 varchar(10),field3 int)
insert into 表
select '单位1','费用1',10
union all select '单位1','费用2',20
union all select '单位2','费用1',11
union all select '单位2','费用2',22
union all select '单位n','费用1',13
union all select '单位n','费用2',21
go
--查询处理
declare @s varchar(8000)
set @s=''
select @s=@s+',['+field1+']=sum(case field1 when '''+field1+''' then field3 else 0 end)'
from(select distinct field1 from 表)a
exec('select field2'+@s+' from 表 group by field2')
go
测试:
create table 表名 (field1 varchar(10),field2 varchar(10),field3 int)
insert 表名 select '单位1','费用1',10
union all select '单位1','费用2',20
union all select '单位2','费用1',11
union all select '单位2','费用2',22
union all select '单位n','费用1',13
union all select '单位n','费用2',21
declare @sql varchar(8000)
set @sql = 'select field2'
select @sql = @sql + ',sum(case field1 when '''+field1+''' then field3 end) ['+field1+']'
from (select distinct field1 from 表名) as a
select @sql = @sql+' from 表名 group by field2'
exec(@sql)
field2 单位1 单位2 单位n
---------- ----------- ----------- -----------
费用1 10 11 13
费用2 20 22 21
declare @s varchar(8000)
set @s=''
select @s=@s+',['+field1+']=sum(case field1 when '''+field1+''' then field3 else 0 end)'
from(select distinct field1 from 表)a
exec('select field2'+@s+' from 表 group by field2')
declare @sql varchar(8000)
set @sql = 'select field2'
select @sql = @sql + ',sum(case field1 when '''+field1+''' then field3 end) ['+field1+']'
from (select distinct field1 from 表名) as a
select @sql = @sql+' from 表名 group by field2'
exec(@sql)