SQL转换为3到2列

时间:2016-05-04 13:36:20

标签: sql sql-server unpivot

我正在尝试将3列转换为2.有没有办法可以通过下面的示例或其他方式执行此操作?

例如。

Year   Temp   Temp1
2015    5       6

分为:

Year   Value
Base     5
2015     6

3 个答案:

答案 0 :(得分:5)

这称为unpivot,pivot恰恰相反(将2列更多)。

您可以使用简单的UNION ALL

执行此操作
SELECT 'Base',s.temp FROM YourTable s
UNION ALL
SELECT t.year,t.temp1 FROM YourTable t

这会转发您在评论中所写的内容,如果年份不变,您可以将其替换为“2015”

答案 1 :(得分:2)

您可以使用CROSS APPLY和行构造函数:

SELECT s.*
FROM t
CROSS APPLY(VALUES('Base', Temp),(CAST(Year AS NVARCHAR(100)), Temp1)
           ) AS s(year,value);

LiveDemo

答案 2 :(得分:2)

您的问题有多个答案。使用UNION ALL似乎是最简单的解决方案。

我建议阅读此帖子Converting Columns into rows with their respective data in sql server,因为它提供了更多详细信息,您可以尝试测试不同的解决方案将如何为您服务。