SQL:将多个列转换为行

4
我有一个以下格式的表格: enter image description here 我需要将其转换为以下格式: enter image description here 所以我想要将多列转换为行。有人能帮我吗? 谢谢。

3
请使用纯文本格式的示例数据,而不是图像。 - Giorgos Betsos
2个回答

8

尝试

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

谢谢nazark,这对我很有效。感谢在这里的帮助。 - Tayyab Amin

3
将列转换为行被称为反枢轴化。将行转换为列则是枢轴化。
一种反枢轴化数据的方法是将 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 运算符有助于其他人理解您代码的意图。如果那个答案对您有帮助,请 接受它。接受答案可以奖励贡献者的努力,并帮助其他遇到同样问题的人找到可行的答案。


谢谢您解释这一切。nazark的回复帮助我获得了所需的结果。 - Tayyab Amin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接