我在 Redshift 中有以下数据框,其中每个帐户都有 6 个月的多列数据。在此示例中,我仅显示一个帐户,其中包含两列
purch
和 bal
:
我知道如何
pivot
对于单个列,它会是这样的:
pivot(sum(purch) for mth in ('1' as purch_1, '2' as purch_2 ...))
但我想吹出多个列宽,每个帐户一行,如下所示:
根据我在网上阅读的内容,
pivot
函数无法处理多个列以使其变宽,但也许我还没有足够扩展我的搜索。
知道如何对多列有效地执行此操作吗?
一种方法是通过 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;