SQL转置列?
我正在尝试从旧表中的数据创建一个新表。我想从一个有5000个值的表中选取一列,并在新表中将每个值作为一个单独的列。然后我想把每一行的数据输入到列中。我想这可以在MSSMS中作为一个查询来完成,但我不确定如何完成 我不知道如何在这里摆桌子,但基本上这就是我想做的-SQL转置列?,sql,sql-server,ssms,Sql,Sql Server,Ssms,我正在尝试从旧表中的数据创建一个新表。我想从一个有5000个值的表中选取一列,并在新表中将每个值作为一个单独的列。然后我想把每一行的数据输入到列中。我想这可以在MSSMS中作为一个查询来完成,但我不确定如何完成 我不知道如何在这里摆桌子,但基本上这就是我想做的- Table 1: Col1 Col2 Col3 Row1 a hello world Row2 b why ok Row3 c the ban
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
您可以使用透视和联合来填充表。类似于以下的方法应该可以工作: **为了对表中的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
你到底为什么要这么做?这看起来像一个支点。如果您真的希望看到这样的数据,请在查询(视图或存储过程)中执行此操作,而不是试图维护同一数据的两个副本。您将拥有5000列?听起来不太好…一般来说,SQL Server不支持包含5000列的表或视图。(您可以使用稀疏列,但这也可能会带来问题。)这看起来很好,可以工作,但问题是我不能对所有5000多个条目都这样做。a、b和c只是一个例子来说明我的意思。@JonW很抱歉,我没有意识到你有5000列,我现在更新了我的答案,希望这会有所帮助。