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;

还有其他更有效的方法(尤其是对于较大的表)。我更喜欢使用横向连接(使用lateralapply 关键字)。 SQL 还提供了一种非常具体的反透视语法。

【讨论】:

以上是关于sql 将列数据转换为行的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2008 R2,将列转换为行,将行转换为列[重复]

将列计数转换为行计数的 SQL 查询

SQL 将列转换为行

SQL 查询将列转换为行

SQL Server:将列转换为行

需要 PL/SQL 存储过程将列转换为行