要用临时表配合动态生成SQL的方法来实现,方法如下:--创建处理数据的临时表
select cast(0 as int) as groupid,姓名,系号
into #tb from 学生表--更新分组字段[groupid]
declare @系号 varchar(10),@i int
update #tb set @i=case @系号 when @系号 then @i+1 else 1 end
,@系号=系号,groupid=@i--创建生成结果的动态SQL
declare @sql varchar(8000)
set @sql=''
select @sql=@sql+char(13)
+',isnull(max(case 系号 when '''+系号+''' then 姓名 end),'''') as ['+系名+']'
from 系号表 where 系号 in(select distinct 系号 from 学生表)
set @sql='select groupid'+char(13)+@sql+char(13)+
'from #tb group by groupid'--调用生成的SQL显示结果
exec(@sql)--删除生成的临时表
drop table #tb
select cast(0 as int) as groupid,姓名,系号
into #tb from 学生表--更新分组字段[groupid]
declare @系号 varchar(10),@i int
update #tb set @i=case @系号 when @系号 then @i+1 else 1 end
,@系号=系号,groupid=@i--创建生成结果的动态SQL
declare @sql varchar(8000)
set @sql=''
select @sql=@sql+char(13)
+',isnull(max(case 系号 when '''+系号+''' then 姓名 end),'''') as ['+系名+']'
from 系号表 where 系号 in(select distinct 系号 from 学生表)
set @sql='select groupid'+char(13)+@sql+char(13)+
'from #tb group by groupid'--调用生成的SQL显示结果
exec(@sql)--删除生成的临时表
drop table #tb
--创建数据测试环境
--学生表
declare @stu table(xh varchar(10),name varchar(200),x varchar(10))
--系号表
declare @x table(x varchar(10),name varchar(200))--用数据库中的用户表模拟系数据
insert into @x
select right('0000000000'+cast(id as varchar(10)),10)
,name from sysobjects where objectproperty(id,'IsUserTable')=1--用数据库中的字段模拟学生数据
insert into @stu
select right('0000000000'+cast(colid as varchar(10)),10), name
,right('0000000000'+cast(id as varchar(10)),10) from syscolumns where objectproperty(id,'IsUserTable')=1
order by id,colid--生成临时表以备数据处理
select cast(0 as int) as groupid,x,name into #tb from @stu--更新临时表,处理分组字段groupid
declare @xx varchar(10),@i int
update #tb set @i=case @xx when x then @i+1 else 1 end
,@xx=x,groupid=@i--生成数据处理的SQL语句
declare @sql varchar(8000)
set @sql=''
select @sql=@sql+char(13)
+',isnull(max(case x when '''+x+''' then name end),'''') as ['+name+']'
from @x where x in(select distinct x from @stu)
set @sql='select groupid'+char(13)+@sql+char(13)+
'from #tb group by groupid'--执行上面生成的数据处理的SQL语句
exec(@sql)--删除临时表
drop table #tb
----------- -------------------- -------------------- --------------------
1 id id id
2 objectid 月份 报表名称
3 property 内容 行
4 value 计算公式 列
5 lvalue 校验公式 公式
6 version 内容1
7 uvalue 内容2
8 内容3
9 内容4
10 计算公式1
11 计算公式2
12 计算公式3
13 计算公式4
--更新临时表,处理分组字段groupid
declare @xx varchar(10),@i int
update #tb set @i=case @xx when x then @i+1 else 1 end
,@xx=x,groupid=@i
--学生表stu(xh 学号,name 姓名,x 系号)
create table stu (xh varchar(10),name varchar(200),x varchar(10))
--系号表x(x 系号,name 系名)
create table x(x varchar(10),name varchar(200))
我在测试时用的是定义表变量的办法(sql 2000支持):
--学生表
declare @stu table(xh varchar(10),name varchar(200),x varchar(10))
--系号表
declare @x table(x varchar(10),name varchar(200))