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