首页 > 解决方案 > 在 PostgresSQL 中透视数据

问题描述

我有一张桌子

开始日期 序号 数数 Emp_id
老的 0 1 1
2020-12-07 1 15 1
更多的 2 4 1
全部的 3 20 1
老的 0 15 2
2020-12-07 1 20 2
更多的 2 5 2
全部的 3 40 2

我需要输出为

Emp_id 老的 2020-12-07 更多的 全部的
1 1 15 4 20
2 15 20 5 40

有人可以给我一些想法或指出如何实现所需输出的方向吗?

标签: sqlpostgresqlpivotaggregate-functions

解决方案


对于固定的值列表,您可以使用条件聚合:

select emp_id
    max(count) filter(where start_date = 'old'       ) as val_old,
    max(count) filter(where start_date = '2020-12-07') as val_2020_12_07,
    max(count) filter(where start_date = 'More'      ) as val_more,
    max(count) filter(where start_date = 'Total'     ) as val_total
from mytable
group by emp_id

推荐阅读