请指教:行列数据翻转

我想把下面的表(或查询结果):
col1 col2 col3
row1
row2
row3
用SQL语句变为:
row1 row2 row3
col1
col2
col3

---------------------------------------------------------------

好象CSDN内的翻转都是有条件转,或FIELD折分,我做个无条件竖表横排:
create procedure Change_Row_Col(@table varchar(20))
as
set @table='tablename'
declare @sql nvarchar(4000),@sql1 nvarchar(4000),@sql2 nvarchar(4000)
declare @field varchar(20),@value varchar(20)
declare @count int,@i int
--建表
if exists (select * from sysobjects where id=object_id('temptable'))
drop table temptable
set @sql='select @cou=count(*) from '+@table
exec sp_executesql @sql,N'@cou int output',@count output
set @sql='create table temptable ('
set @i=1
while @i<=@count
begin
set @sql=@sql+'F'+cast(@i as varchar(3))+' varchar(20),'
set @i=@i+1
end
set @sql=left(@sql,len(@sql)-1)+')'
exec(@Sql)
--找源表FIELD
set @sql='
declare t1 cursor for
select b.name from sysobjects a,syscolumns b where a.id=b.id and a.xtype=''U'' and a.name='''+@table+''''
exec(@sql)
open t1
fetch next from t1 into @field
--写记录
while @@FETCH_STATUS<>-1
begin
set @sql1='insert into temptable('
set @sql2=' values('
set @i=1
while @i<=@count
begin
set @sql1=@sql1+'F'+cast(@i as varchar(3))+','
set @i=@i+1
end
set @sql='
declare t2 cursor for
select '+@field+' from '+@table
exec(@sql)
open t2
fetch next from t2 into @value
while @@FETCH_STATUS<>-1
begin
set @sql2=@sql2+''''+rtrim(convert(varchar(20),isnull(@value,'')))+''','
fetch next from t2 into @value
end
close t2
deallocate t2
set @sql=left(@sql1,len(@sql1)-1)+')'+left(@sql2,len(@sql2)-1)+')'
exec (@sql)
fetch next from t1 into @field
end
close t1
deallocate t1

GO

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus