SQL转置列?

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

我正在尝试从旧表中的数据创建一个新表。我想从一个有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

您可以使用透视和联合来填充表。类似于以下的方法应该可以工作:

**为了对表中的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列,我现在更新了我的答案,希望这会有所帮助。