要用临时表配合动态生成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

解决方案 »

  1.   

    下面是我做的测试数据.
    --创建数据测试环境
    --学生表
    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
      

  2.   

    下面是我测试数据的结果,我只用了三个表进行测试:groupid     dtproperties         报表                   报表公式                 
    ----------- -------------------- -------------------- -------------------- 
    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                
      

  3.   

    哦,谢谢。可是一时也没看明白, zjcxc(邹建)兄,你可以把表测试的表结构列出来,我看看结果吗?
      

  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
      

  5.   

    表结构中上面有列出来啊.
    --学生表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))
      

  6.   

    提示什么错误?我是sql 2000,执行正常.