【发布时间】:2013-05-11 23:26:19
【问题描述】:
背景
我有每月的时间序列数据,我想对每个 ID 的值求和,按月份分组,然后将月份名称作为列而不是行。
示例
+----+------------+-------+-------+
| id | extra_info | month | value |
+----+------------+-------+-------+
| 1 | abc | jan | 10 |
| 1 | abc | feb | 20 |
| 2 | def | jan | 10 |
| 2 | def | feb | 5 |
| 1 | abc | jan | 15 |
| 3 | ghi | mar | 15 |
想要的结果
+----+------------+-----+-----+-----+
| id | extra_info | jan | feb | mar |
+----+------------+-----+-----+-----+
| 1 | abc | 25 | 20 | 0 |
| 2 | def | 10 | 5 | 0 |
| 3 | ghi | 0 | 0 | 15 |
当前方法
我可以轻松地按月分组,对这些值求和。这让我:
-----------------------------------
| id | extra_info | month | value |
+----+------------+-------+-------+
| 1 | abc | jan | 25 |
| 1 | abc | feb | 20 |
| 2 | def | jan | 10 |
| 2 | def | feb | 5 |
| 3 | ghi | mar | 15 |
但我现在需要这些月份作为列名。不知道从这里去哪里。
附加信息
- 就语言而言,此查询将在 postgres 中运行。
- 以上月份只是示例,显然真实数据集要大得多,涵盖了数千个 ID 的全部 12 个月
非常感谢 SQL 大师的任何想法!
【问题讨论】:
标签: sql postgresql pivot case crosstab