--测试数据
create table 表(
时间 int, 企业名称 varchar(10),
流动比率 decimal(10,1),速动比率 decimal(10,1),现金比率 decimal(10,1),
现金流动负债比率 decimal(10,1), 现金负债比率 decimal(10,1))
insert 表 select 2003,'清华同方',3.39, 1.35,  0.15,   10.6,  5.6  
union all select 2003,'北大方正',3.0,  1.6,   0.21,   15.3,  6.5  
union all select 2004,'清华同方',4.20, 1.50,  0.13,   12.3,  6.3
union all select 2004,'北大方正',3.5,  1.68,  0.16,   14.3,  6.0 
go--查询处理
declare @s1 varchar(8000),@s2 varchar(8000)
,@s3 varchar(8000),@s4 varchar(8000),@s5 varchar(8000)
,@i varchar(10)
select @s1='',@s2='',@s3='',@s4='',@s5='',@i='0'
select @s1=@s1+',@'+@i+' varchar(8000)'
,@s2=@s2+',@'+@i+'=''[字段1]='''''+name+''''''''
,@s3=@s3+'
,@'+@i+'=@'+@i+'+'',[字段''+cast(@i as varchar)+'']=''+quotename(['+name+'],'''''''')'
,@s4=@s4+',@'+@i+'=''select ''+@'+@i
,@s5=@s5+'+'' union all ''+@'+@i
,@i=cast(@i as int)+1
from syscolumns 
where object_id('表')=idselect @s1=stuff(@s1,1,1,'')
,@s2=stuff(@s2,1,1,'')
,@s4=stuff(@s4,1,1,'')
,@s5=stuff(@s5,1,15,'')exec('declare '+@s1+',@i int
select '+@s2+'
set @i=1
select @i=@i+1'+@s3+'
from 表
select '+@s4+'
exec('+@s5+')')
go
--删除测试
drop table 表/*--测试结果字段1              字段2      字段3      字段4      字段5
---------------- -------- -------- -------- --------
时间               2003     2003     2004     2004
企业名称             清华同方     北大方正     清华同方     北大方正
流动比率             3.4      3.0      4.2      3.5
速动比率             1.4      1.6      1.5      1.7
现金比率             0.2      0.2      0.1      0.2
现金流动负债比率         10.6     15.3     12.3     14.3
现金负债比率           5.6      6.5      6.3      6.0(7 行受影响)
--*/

解决方案 »

  1.   

    昏,老大搞得太深奧~~~
    偶一般直接union 或者join 慢慢一條一條寫~~~
      

  2.   

    多谢!我自己写了一个差不多的,但出错了。请看一下:--测试数据
    create table 表(
    时间 int, 企业名称 varchar(10),
    流动比率 decimal(10,1),速动比率 decimal(10,1),现金比率 decimal(10,1),
    现金流动负债比率 decimal(10,1), 现金负债比率 decimal(10,1))
    insert 表 select 2003,'清华同方',3.39, 1.35,  0.15,   10.6,  5.6  
    union all select 2003,'北大方正',3.0,  1.6,   0.21,   15.3,  6.5  
    union all select 2004,'清华同方',4.20, 1.50,  0.13,   12.3,  6.3
    union all select 2004,'北大方正',3.5,  1.68,  0.16,   14.3,  6.0 
    go--查询处理
    declare @s1  varchar(8000),
    @s2  varchar(8000),
    @s3  varchar(8000),
    @s4  varchar(8000),
    @s5  varchar(8000),
    @i  varchar(10)  
    select  @s1='',@s2='',@s3='',@s4='',@s5='',@i='0'  
    select  @s1=@s1+',@'+@i+'  varchar(8000)',
    @s2=@s2+',@'+@i+'=''时间='''''+name+'''''''',
    @s3=@s3+',@'+@i+'=@'+@i+'+'',[''+cast([时间]  as  varchar)+'']=''''''+cast(['+name+']  as  varchar)+''''''''',
    @s4=@s4+',@'+@i+'=''select  ''+@'+@i,
    @s5=@s5+'+'' union all ''+@'+@i,
    @i=cast(@i  as  int)+1  
    from  syscolumns    
    where  object_id('tt')=id  and  colid>1  
    order  by  colid select  @s1=stuff(@s1,1,1,'')  
               ,@s2=stuff(@s2,1,1,'')  
               ,@s3=stuff(@s3,1,4,'')  
               ,@s4=stuff(@s4,1,1,'')  
               ,@s5=stuff(@s5,1,15,'')  
     exec('declare  '+@s1+'  
    select  '+@s2+'  
    select  '+@s3+'  
    from tt  
    select  '+@s4+'  
    exec('+@s5+')') 我这么写开始也是可以的,不知道改动了什么,开始报错:
    服务器: 消息 141,级别 15,状态 1,行 5
    向变量赋值的 SELECT 语句不能与数据检索操作结合使用。
    郁闷了半天,也没找出错误:(
      

  3.   

    是不是这一段出了问题??
    我的代码是:
    select  @s1=stuff(@s1,1,1,'')  
               ,@s2=stuff(@s2,1,1,'')  
               ,@s3=stuff(@s3,1,4,'')  
               ,@s4=stuff(@s4,1,1,'')  
               ,@s5=stuff(@s5,1,15,'') 
    zjcxc(邹建) 的代码是:select @s1=stuff(@s1,1,1,'')
    ,@s2=stuff(@s2,1,1,'')
    ,@s4=stuff(@s4,1,1,'')
    ,@s5=stuff(@s5,1,15,'')
    不同之处在于,我的多了一行
    ,@s3=stuff(@s3,1,4,'') 
    是这个问题吗?stuff()函数的作用是去除第一个逗号吗?
      

  4.   

    排查許久,發現是這裡的問題select  @s1=stuff(@s1,1,1,'')  
               ,@s2=stuff(@s2,1,1,'')  
               ,@s3=stuff(@s3,1,4,'')  
               ,@s4=stuff(@s4,1,1,'')  
               ,@s5=stuff(@s5,1,15,'')  改為
    select  @s1=stuff(@s1,1,1,'')  
               ,@s2=stuff(@s2,1,1,'')  
               ,@s3=stuff(@s3,1,1,'')  
               ,@s4=stuff(@s4,1,1,'')  
               ,@s5=stuff(@s5,1,15,'')