将 SQL 从 3 列转换为 2 列

4
我正在尝试将3列转换为2列。是否可以使用以下示例或其他方式来实现此目标?
例如。
Year   Temp   Temp1
2015    5       6

转换:

Year   Value
Base     5
2015     6

你使用哪种数据库管理系统?例如,这里有一个 PIVOT 操作符可以用于此操作,但它只存在于 MSSQL 中。 - Smileek
我正在使用的是SQL Server。 - TheProgrammer
2
为什么数字6得到2015年,而数字5得到基数? - sagi
@sagi 任何针对temp1的内容都会被分配到2015年,而任何针对temp的内容都会被分配到基线。 - TheProgrammer
1
@DeVonte 这是一个非逆转而是逆转。 - Taryn
3个回答

5
这被称为反转表格,而将两列合并成更多列则称为数据透视表。
你可以通过简单的UNION ALL实现此操作:
SELECT 'Base',s.temp FROM YourTable s
UNION ALL
SELECT t.year,t.temp1 FROM YourTable t

根据您在评论中写的内容,如果年份是恒定的,您可以将其替换为“2015”


如果您在查询中使用了别名,您需要对其进行声明。 - Rich Benner
1
@RichBenner 哈哈,我没注意到我实际上没有给表起别名。谢谢。 - sagi
如果“Year”是一个数字,你将会得到转换错误。第二个第一列没有命名。 - Lukasz Szozda
我根据他的示例推断他将年份作为字符串包含在内。我猜想他这么说是因为它起作用了。@lad2025 - sagi

2

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

我建议阅读这个帖子在SQL Server中将列转换为行及其相应数据,因为它提供了更多细节,你可以尝试和测试不同的解决方案来找到最适合你的方法。


2

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

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

实时演示


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