原表为 t1
name d1 d2......d960
a 1 2...... 960
b 1 2...... 960
如何转为
t2
name d
a 1
a 2
a 3
...
a 960
b 1
b 2
...
b 960
我原写过
select name ,d1 from t1
union select name ,d2 from t1
...
union select name ,d960 from t1
但特慢,不知有无更好的sql,谢谢!
...全文
13710打赏收藏
请求一列转行的sql
原表为 t1 name d1 d2......d960 a 1 2...... 960 b 1 2...... 960 如何转为 t2 name d a 1 a 2 a 3 ... a 960 b 1 b 2 ... b 960 我原写过 select name ,d1 from t1 union select name ,d2 from t1 ... union select name ,d960 from t1 但特慢,不知有无更好的sql,谢谢!
Declare @i int, @sql varchar(100)
Set @i = 1
while @i < = 960
begin
Set @sql = 'insert into t2 select top 1 ''a'' ,' + Col_name(Object_id('t1'),@i ) + ' from t1'
Exec(@sql)
Set @i = @i + 1
end
Declare @i int, @sql varchar(100)
Set @i = 1
while @i < = 960
begin
Set @sql = 'insert into t2 select top 1 ''b'' ,' + Col_name(Object_id('t1'),@i ) + ' from t1'
Exec(@sql)
Set @i = @i + 1
end
在公司的服務器上速度還不錯