SQL:将多个列转换为行

时间:2016-07-01 13:00:08

标签: sql-server sql-server-2008 sql-server-2005

我有一张以下格式的表格 loading startup image 我需要将其转换为此格式

enter image description here

所以基本上我希望将多列转换为行。有人可以帮我弄这个吗?

谢谢

2 个答案:

答案 0 :(得分:3)

select *
  from yourTable
  unpivot (
    Value
    for NewCol in (Value1, Value2, Value3,Value4, Value5)
  ) up

答案 1 :(得分:1)

将列转换为行称为unpivoting。将行转换为列是旋转的。

取消隐藏数据的一种方法是将apply operatortable value constructor结合起来。

此示例使用common table expression (CTE)返回3个样本记录。

Id  ColumnOne   ColumnTwo   ColumnThree
1   a           b           c
2   d           e           f
3   g           h           i

示例

-- Unpivoting with apply and VALUES.        
WITH SampleData AS
    (
        /* This CTE returns 3 sample records.
         */             
        SELECT
            cte.*
        FROM
            (
                VALUES
                    (1, 'a', 'b', 'c'),
                    (2, 'd', 'e', 'f'),
                    (3, 'g', 'h', 'i')
            ) AS cte(Id, ColumnOne, ColumnTwo, ColumnThree)
    )
SELECT
    sd.Id,
    ca.*
FROM
    SampleData AS sd
        CROSS APPLY
            (
                VALUES
                    (ColumnOne),
                    (ColumnTwo),
                    (ColumnThree)
            ) AS ca (ColumnFour)
;

返回的输出如下所示:

Id  ColumnFour
1   a
1   b
1   c
2   d
2   e
2   f
3   g
3   h
3   i

我个人更喜欢@nazark的做法。使用UNPIVOT运算符可以帮助其他人遵循代码的意图。如果答案对您有帮助,请accept it。接受答案会奖励贡献者的努力,并帮助其他有相同问题的人找到合适的答案。