drop table #t
create table #t(学生号 varchar(6),地区号 varchar(4),科目 varchar(20),分数 int)
insert into #t
select '00001','0001','(语文)','89'
union all select '00001','0001','(数学)','89'
union all select '00002','0002','(英语)','89'
union all select '00002','0002','(数学)','89'
union all select '00002','0002','(生理)','89'
union all select '00003','0003','(生物)','89'
union all select '00003','0003','(法律)','89'
union all select '00003','0003','(政治)','89'
union all select '00003','0003','(马列)','89'
if exists (select * from sysobjects where name = '_aa' and type = 'u')
drop table _aa
declare @s varchar(3000)
set @s = 'select 学生号, 地区号'
select @s = @s + ',sum(case when 科目 ='''+ 科目 + ''' then 分数 else 0 end) as [' +科目+']' from (select distinct 科目 from #t) A order by 科目
set @s = @s + ' into _aa from #t group by 学生号, 地区号'
exec (@s)
create proc bcp_excel
@tableName varchar(100)
as
set nocount on
declare @column varchar(8000)
set @column='select '
select @column = @column + ''''+ name + space(100) +''''+'as ' + name + ',' --如果某个列的长度大于100,那么把space中的数字调大一点
from (select b.name from sysobjects a join syscolumns b on a.id=b.id where a.name=@tableName) tem
set @column = left(@column,len(@column)-1)
--print @column
set @column = @column + ' into ##temp from (select top 1 b.name from sysobjects a join syscolumns b on a.id=b.id where a.name='''+@tableName+''') tem'
exec (@column)
exec('insert into ##temp select * from '+@tableName+'')
exec master..xp_cmdshell 'bcp "select * from ##temp" queryout c:\b.xls -c -q -Usa -Ppwd'
drop table ##temp
set nocount off
set @temp1='select @value1='''',@value2='''' select @value1=@value1+'',''''''+a.name+''''+char(39)+'' [''+a.name+'']'',@value2=@value2+'',cast(''+''[''+a.name+'']''+ '' as varchar(200))'' from '+@库名+'..syscolumns a,'+@库名+'..sysobjects d where a.id=d.id and d.name='''+@表名+''''+' order by a.colorder'
exec('select * into '+@库名+'.dbo.中间表 from (select '+ @temp1+' union all SELECT '+@temp2+' FROM '+@库名+'..'+@表名+') tem3')
set @temp2='bcp '+@库名+'.dbo.中间表 out '+@路径及文件名+' -c -S'+@服务器名+' -U'+@用户名+' -P'+@密码
EXEC master..xp_cmdshell @temp2
exec('drop table '+@库名+'.dbo.中间表')
GO
2、把你的交叉查询导到一个临时表比如:
declare @sql varchar(8000)
set @sql = 'select 年份'
select @sql = @sql + ',sum(case 季度 when '''+cast(季度 as varchar(10))+''' then 数据 else 0 end) as ['+cast(季度 as varchar(10))+'季度数据]'
from (select distinct 季度 from 有一表) as a
select @sql = @sql+' into 中间临时表 from 有一表 group by 年份'
exec(@sql)
go
set @temp1='select @value1='''',@value2='''' select @value1=@value1+'',''''''+a.name+''''+char(39)+'' [''+a.name+'']'',@value2=@value2+'',cast(''+''[''+a.name+'']''+ '' as varchar(200))'' from '+@库名+'..syscolumns a,'+@库名+'..sysobjects d where a.id=d.id and d.name='''+@表名+''''+' order by a.colorder'
exec('select * into '+@库名+'.dbo.中间表 from (select '+ @temp1+' union all SELECT '+@temp2+' FROM '+@库名+'..'+@表名+') tem3')
set @temp2='bcp '+@库名+'.dbo.中间表 out '+@路径及文件名+' -c -S'+@服务器名+' -U'+@用户名+' -P'+@密码
EXEC master..xp_cmdshell @temp2
exec('drop table '+@库名+'.dbo.中间表')
GO
2、把你的交叉查询导到一个临时表比如:
declare @sql varchar(8000)
set @sql = 'select 年份'
select @sql = @sql + ',sum(case 季度 when '''+cast(季度 as varchar(10))+''' then 数据 else 0 end) as ['+cast(季度 as varchar(10))+'季度数据]'
from (select distinct 季度 from 有一表) as a
select @sql = @sql+' into 中间临时表 from 有一表 group by 年份'
exec(@sql)
go