Redshift PIVOT 多列

问题描述 投票:0回答:1

我在 Redshift 中有以下数据框,其中每个帐户都有 6 个月的多列数据。在此示例中,我仅显示一个帐户,其中包含两列

purch
bal
:

我知道如何

pivot
对于单个列,它会是这样的:

pivot(sum(purch) for mth in ('1' as purch_1, '2' as purch_2 ...))

但我想吹出多个列宽,每个帐户一行,如下所示:

根据我在网上阅读的内容,

pivot
函数无法处理多个列以使其变宽,但也许我还没有足够扩展我的搜索。

知道如何对多列有效地执行此操作吗?

sql pivot amazon-redshift transpose
1个回答
0
投票

一种方法是通过 CASE 语句和聚合函数的组合。 例如,要旋转两列的数据,purchase 和 bal 为期六个月。假设第 m 列包含代表月份的从 1 到 6 的整数值,帐户是帐户标识符。

SELECT
    account,
    SUM(CASE WHEN mth = 1 THEN purch ELSE 0 END) AS purch_1,
    SUM(CASE WHEN mth = 1 THEN bal ELSE 0 END) AS bal_1,
    SUM(CASE WHEN mth = 2 THEN purch ELSE 0 END) AS purch_2,
    SUM(CASE WHEN mth = 2 THEN bal ELSE 0 END) AS bal_2,
    SUM(CASE WHEN mth = 3 THEN purch ELSE 0 END) AS purch_3,
    SUM(CASE WHEN mth = 3 THEN bal ELSE 0 END) AS bal_3,
    SUM(CASE WHEN mth = 4 THEN purch ELSE 0 END) AS purch_4,
    SUM(CASE WHEN mth = 4 THEN bal ELSE 0 END) AS bal_4,
    SUM(CASE WHEN mth = 5 THEN purch ELSE 0 END) AS purch_5,
    SUM(CASE WHEN mth = 5 THEN bal ELSE 0 END) AS bal_5,
    SUM(CASE WHEN mth = 6 THEN purch ELSE 0 END) AS purch_6,
    SUM(CASE WHEN mth = 6 THEN bal ELSE 0 END) AS bal_6
FROM
    TABLE_NAME
GROUP BY
    account;
© www.soinside.com 2019 - 2024. All rights reserved.