将行数据转换为列

Posted

技术标签:

【中文标题】将行数据转换为列【英文标题】:Convert Row Data Into Column 【发布时间】:2015-01-27 13:10:07 【问题描述】:
AssetName   Generation_Qtr  Cum_Actual_Gen
10001         2007 Q 2           0
2             2007 Q 3           182.21
10001         2007 Q 3           0
2             2007 Q 4           1064.49
10001         2007 Q 4            0
2             2008 Q 1           1937.18
3             2008 Q 1           1498.21
4             2008 Q 1           1291

我正在尝试编写数据透视查询以将行转换为列,以便获得以下输出

assetname   2007 q 1    2007 q 2   2007 q 3    2007 q 4
1001                     1937.18   1937.18     1937.18
2                        1937.18   182.21      1064.49   
3           1498.21
4           1291

有没有更好的方法。 我正在处理大量数据,接近 500 000 行。

【问题讨论】:

【参考方案1】:

您需要使用动态 SQL 来透视数据。下面的例子

declare @cols as varchar(100)
declare @sql as varchar(1000)

set @cols = ''
set @sql = ''

select @cols  = @cols + case when @cols = '' then '[' else ', [' end + Generation_Qtr + ']'
FROM dbo.MyData
group by Generation_Qtr
order by Generation_Qtr

select @Sql = 'SELECT *
FROM (
    select AssetName,   Generation_Qtr,  Cum_Actual_Gen 
    FROM dbo.MyData
) as s
PIVOT 
(
    SUM(Cum_Actual_Gen )
    FOR Generation_Qtr IN (' + @Cols + ')
)AS p'

exec(@Sql)

【讨论】:

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

这是一个员工数据,我想使用数据透视将行数据转换为列

在 Tableau 中反透视数据 将行转换为列

MS Access SQL 将行转换为列

SQL Server - Pivot 将行转换为列(带有额外的行数据)

pyspark 将行转换为列

Mysql查询根据两列动态将行转换为列