sql 将列数据转换为行
Posted
技术标签:
【中文标题】sql 将列数据转换为行【英文标题】:sql pivot column data into rows 【发布时间】:2018-02-25 22:47:32 【问题描述】:我正在使用 SQL 工作台中的一个表。
我有一张人口数据表,如下所示(为方便起见,人口数据被简化了):
State 2010 2011 2012 2013 2014 2015
Alaska 5 8 10 13 15 19
我想将此表转换为如下所示的表:
State Year Estimate
Alaska 2010 5
Alaska 2011 8
Alaska 2012 10
Alaska 2013 13
Alaska 2014 15
Alaska 2015 19
我需要什么语句来完成这个?
谢谢, 加勒特
【问题讨论】:
用您正在使用的数据库标记您的问题。 【参考方案1】:Union all
是一种通用方法:
select state, '2010' as year, "2010" as Estimate from t
union all
select state, '2011' as year, "2011" as Estimate from t
union all
select state, '2012' as year, "2012" as Estimate from t
union all
select state, '2013' as year, "2013" as Estimate from t
union all
select state, '2014' as year, "2014" as Estimate from t
union all
select state, '2015' as year, "2015" as Estimate from t;
还有其他更有效的方法(尤其是对于较大的表)。我更喜欢使用横向连接(使用lateral
或apply
关键字)。 SQL 还提供了一种非常具体的反透视语法。
【讨论】:
以上是关于sql 将列数据转换为行的主要内容,如果未能解决你的问题,请参考以下文章