select 'v1' 点名,时间,v1 值 from 表1 union all select 'v2' 点名,时间,v2 值 from 表1 union all select 'v3' 点名,时间,v3 值 from 表1 ...
先建个新表t1(点名 varchar(20),时间 datetime,值 int) declare @a int declare @d datetime declare @b int declare @c varchar(20) set @d='2002-2-2' set @a=1 while @a<1024 begin set @c=col_name(object_id(表一),@a set @a=@a+1 set @b=(select @c from 表一) insert into t1 values(@c,@d,@b) end
--查询处理 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+'=''select 点名=''''' +name+''''',时间,值=[' +name+'] from 表1''' ,@s3=@s3+'+'' union all ''+@'+@i ,@i=cast(@i as int)+1 from syscolumns where object_id('表1')=id and name<>'时间'select @s1=substring(@s1,2,8000) ,@s2=substring(@s2,2,8000) ,@s3=substring(@s3,16,8000)exec('declare '+@s1+' select '+@s2+' exec(''select * from(''+'+@s3+'+'')a order by 点名'')') go
--测试--测试数据(可以任意增加Vx,不需要更改处理语句) create table 表1(时间 varchar(10),v1 decimal(20,2),v2 decimal(20,1),v3 decimal(20,1)) insert 表1 values('2002-2-2',10.23,2.3,3.4) 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+'=''select 点名=''''' +name+''''',时间,值=[' +name+'] from 表1''' ,@s3=@s3+'+'' union all ''+@'+@i ,@i=cast(@i as int)+1 from syscolumns where object_id('表1')=id and name<>'时间'select @s1=substring(@s1,2,8000) ,@s2=substring(@s2,2,8000) ,@s3=substring(@s3,16,8000)exec('declare '+@s1+' select '+@s2+' exec(''select * from(''+'+@s3+'+'')a order by 点名'')') go--删除测试环境 drop table 表1/*--测试结果点名 时间 值 ---- ---------- ----------------------- v1 2002-2-2 10.23 v2 2002-2-2 2.30 v3 2002-2-2 3.40(所影响的行数为 3 行) --*/
union all
select 'v2' 点名,时间,v2 值 from 表1
union all
select 'v3' 点名,时间,v3 值 from 表1
...
declare @a int
declare @d datetime
declare @b int
declare @c varchar(20)
set @d='2002-2-2'
set @a=1
while @a<1024
begin
set @c=col_name(object_id(表一),@a
set @a=@a+1
set @b=(select @c from 表一)
insert into t1 values(@c,@d,@b)
end
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+'=''select 点名='''''
+name+''''',时间,值=['
+name+'] from 表1'''
,@s3=@s3+'+'' union all ''+@'+@i
,@i=cast(@i as int)+1
from syscolumns
where object_id('表1')=id and name<>'时间'select @s1=substring(@s1,2,8000)
,@s2=substring(@s2,2,8000)
,@s3=substring(@s3,16,8000)exec('declare '+@s1+'
select '+@s2+'
exec(''select * from(''+'+@s3+'+'')a order by 点名'')')
go
create table 表1(时间 varchar(10),v1 decimal(20,2),v2 decimal(20,1),v3 decimal(20,1))
insert 表1 values('2002-2-2',10.23,2.3,3.4)
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+'=''select 点名='''''
+name+''''',时间,值=['
+name+'] from 表1'''
,@s3=@s3+'+'' union all ''+@'+@i
,@i=cast(@i as int)+1
from syscolumns
where object_id('表1')=id and name<>'时间'select @s1=substring(@s1,2,8000)
,@s2=substring(@s2,2,8000)
,@s3=substring(@s3,16,8000)exec('declare '+@s1+'
select '+@s2+'
exec(''select * from(''+'+@s3+'+'')a order by 点名'')')
go--删除测试环境
drop table 表1/*--测试结果点名 时间 值
---- ---------- -----------------------
v1 2002-2-2 10.23
v2 2002-2-2 2.30
v3 2002-2-2 3.40(所影响的行数为 3 行)
--*/
鲜花(问题)到了,结贴吧 zjcxc(: 邹建 :)回答这样的问题,已经太多了
(冒风险建议):在提问题的时候先“搜索”一下,(这样可以省分) :)