像Excel一样创建Postgres Pivot

时间:2018-09-18 14:43:17

标签: postgresql pivot

我需要有关创建数据透视表的帮助。我已经在这里尝试了许多提供的解决方案,但是我陷入了困境。希望有人能帮忙。这是我的情况:

表1示例

ID              text    2712cb957
document_key    text    201808

表2示例

ID          text    2712cb957
amount_net  int     56000
classid     int     4021

表3(通过内部联接ID从表1和表2中获得)
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

enter image description here

1 个答案:

答案 0 :(得分:0)

demo:db<>fiddle

静态枢轴如下所示:


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

A: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