SQL转置列?

时间:2015-02-19 15:43:14

标签: sql sql-server ssms

我试图从旧数据中创建一个新表。我想从一个表中取一列,它有~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

1 个答案:

答案 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