像excel一样创建Postgres Pivot

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

我需要帮助创建数据透视表。我已经尝试了许多提供的解决方案,但我被困住了。希望有人能提供帮助。这是我的情景:

表1样本

ID              text    2712cb957
document_key    text    201808

表2样本

ID          text    2712cb957
amount_net  int     56000
classid     int     4021

表3(来自表1和表2通过内部连接ID) document_key amount_net classid

201808          10          4021
201808          10          4021
201808          15          4023
201808          13          4023
201807          20          4021
201807          15          4021
…               …           …

预期的数据透视表

document_key    4021    4023
201807          35      0
201808          20      28

postgresql pivot
1个回答
0
投票

demo:db<>fiddle

静态pivot可能如下所示:


Postgres 9.4+

Postgres 9.4增加了FILTER功能:

SELECT 
    document_key, 
    COALESCE(SUM(amount_net) FILTER (WHERE classid = 4021), 0) as "4021", -- A
    COALESCE(SUM(amount_net) FILTER (WHERE classid = 4023), 0) as "4023"
FROM test 
GROUP BY document_key
ORDER BY document_key

答:GROUP BY document_key聚集所有document_key组。使用聚合函数SUM,您可以添加所有相应的amount_net值。 FILTER函数用于仅对包含classid = XYZ的行中的这些值求和。汇总周围的COALESCE使NULL值为0。

如果您想要更多列,则必须复制此行代码。


Postgres 9.3及更低

SELECT 
    document_key, 
    SUM(CASE WHEN classid = 4021 THEN amount_net ELSE 0 END) as "4021", 
    SUM(CASE WHEN classid = 4023 THEN amount_net ELSE 0 END) as "4023"
FROM test 
GROUP BY document_key
ORDER BY document_key
© www.soinside.com 2019 - 2024. All rights reserved.