我试图从旧数据中创建一个新表。我想从一个表中取一列,它有~5000个值,并使每个值成为新表中的一个单独的列。然后我想将每行的数据输入到列中。我想这会在MSSMS中作为查询完成,但我不确定如何。
我不知道怎么在这里做桌子,但基本上这就是我想要的 -
Table 1:
Col1 Col2 Col3
Row1 a hello world
Row2 b why ok
Row3 c the banana
Row4 d lion roar
Table 2:
a b c d
Row1 hello why the lion
Row2 world ok banana roar
答案 0 :(得分:0)
您可以使用pivot和union来填充表格。像下面这样的东西应该有效:
**为了对表中的5000列执行此更新,您可以将游标与动态sql一起使用。
使用sys.columns中的表中的所有列填充游标。然后它遍历每列的动态sql。
动态sql执行数据透视并使用游标传递的当前列名更新新表。
Declare @sql varchar(4000),
@Column varchar(200)
Declare curColumns cursor fast_forward for
Select name from sys.columns where object_id = OBJECT_ID('Table1')
Open curColumns
Fetch next from curColumns into @Column
While @@FETCH_STATUS = 0
begin
Set @sql =
'Insert into Table2
Select [a], [b], [c]
from
(select col1, ' + @Column + '
from Table1 ) p
Pivot
(max(col2) for col1 in (a,b,c)
) as pvt'
exec @sql
Fetch next from curColumns into @Column
end
Close curColumns
Deallocate curColumns