我需要有关创建数据透视表的帮助。我已经在这里尝试了许多提供的解决方案,但是我陷入了困境。希望有人能帮忙。这是我的情况:
表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
答案 0 :(得分:0)
静态枢轴如下所示:
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