【问题标题】:Postgres pivot without crosstab没有交叉表的 Postgres 枢轴
【发布时间】:2020-12-30 17:30:24
【问题描述】:

我正在使用功能相对有限的 Postgres 实例 - 例如,crosstab() 函数不可用。我的目标是旋转一个表格,以便ym 中的日期按日期升序排列为列,例如:

输入:

group_code  ym  total
foo 2020-11-01  17
foo 2020-12-01  19
bar 2020-09-01  21
baz 2020-10-01  23

输出:

group_code 2020-09-01 2020-10-01 2020-11-01 2020-12-01
foo        NULL       NULL       17         19
bar        21         NULL       NULL       NULL
baz        NULL       23         NULL       NULL

然而,这里的关键是唯一日期的数量是事先不知道的,并且没有特定日期值的组代码在结果表中应该为 NULL。在 postgres 中是否有一个优雅的解决方法来创建这样一个输出表,而无需使用 CASE WHEN 语句和 FULL OUTER JOINs 预先对所有日期进行硬编码 - 换句话说 - 动态?任何建议将不胜感激

【问题讨论】:

标签: sql postgresql pivot


【解决方案1】:

您可以使用过滤聚合:

select group_code, 
       max(total) filter (where ym = date '2020-09-01') as "2020-09-01",
       max(total) filter (where ym = date '2020-10-01') as "2020-10-01",
       max(total) filter (where ym = date '2020-11-01') as "2020-11-01",
       max(total) filter (where ym = date '2020-12-01') as "2020-11-02"
from the_table
group by group_code;

【讨论】:

    猜你喜欢
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 2021-09-10
    相关资源
    最近更新 更多