将具有动态数据的多列转换为一列

时间:2021-03-03 13:52:54

标签: sql sql-server

我有一个具有以下结构的 SQL 表:

<头>
ID_Employee 1_1 个问题 1_2 个问题 2_1 个问题 2_2 问题 3_1 个问题 3_2 问题
第一次 answer1_1 answer1_2 answer2_1 answer2_2 answer3_1 answer3_2
第二个 answer1_1 answer1_2 answer2_1 answer2_2 answer3_1 answer3_2

提及答案是可变的,即它们没有静态数据 但我需要按照以下结构对此表进行排序:

<头>
ID_Employee 问题1 问题2 问题3
第一次 answer1_1 answer2_1 answer3_1
第一次 answer1_2 answer2_2 answer3_2
第二个 answer1_1 answer2_1 answer3_1
第二个 answer1_2 answer2_2 answer3_2

如果有人可以指导我如何执行此过程,我将不胜感激。非常感谢。

2 个答案:

答案 0 :(得分:0)

您需要unpivot您的数据:

SELECT ID_Employee , questions
FROM
(SELECT * FROM yourtable) pv
UNPIVOT
(questions FOR EmployeeIds IN ( Question1,Question2,Question3,Question4) )  unpvt;

dbfiddle

答案 1 :(得分:0)

如果您有更多的列要一起取消旋转(例如 Question1,Question2 等),使用 CROSS APPLY 来取消旋转比使用 UNPIVOT 更容易:

SELECT
    t.ID_Employee,
    v.Question1,
    v.Question2,
    v.Question3
FROM yourtable t
CROSS APPLY (VALUES
    ([1_1 Question], [2_1 Question], [3_1 Question]),
    ([1_2 Question], [2_2 Question], [3_2 Question])
) v(Question1, Question2, Question3)