如何将表列转换为Sql server表中的垂直数据?

che*_*enk 2 sql sql-server pivot unpivot crosstab

我想将一个Sql server表转换为另一个.

原始表

    Period      Date          Portfolio   Benchmark

    Pre0Month   12/31/2014   -0.0001      -0.0025
    Pre1Month   11/31/2014    0.0122       0.0269
    Pre2Month   10/31/2014    0.0176       0.0244
Run Code Online (Sandbox Code Playgroud)

转型后

    Returns      Pre0Month   Pre1Month    Pre2Month

    Portfolio   -0.0001      0.0122       0.0176
    Benchmark   -0.0025      0.0269       0.0244
Run Code Online (Sandbox Code Playgroud)

小智 5

考虑到表的名称是MyTable,您可以通过以下方式进行透视:

SELECT * FROM
(
  SELECT Period, [Returns], value
  FROM MyTable
  CROSS APPLY
  (
    SELECT 'Portofolio', CAST(Portofolio as varchar(10)) 
    UNION ALL
    SELECT 'Benchmark', CAST(Benchmark as varchar(10)) 
  ) c([Returns], value)
) d
PIVOT
(
    MAX(value)
    FOR Period IN (Pre0Month, Pre1Month, Pre2Month)
) piv;
Run Code Online (Sandbox Code Playgroud)