sql - Postgres 根据列值将行转置为列
问题描述
我statement
在 Postgres 中有下表:
stock | year | statement | amount
ACME | 2003 | Q1 Earnings | 100
ACME | 2003 | Q2 Earnings | 200
ACME | 2004 | Q2 Earnings | 300
如何制作一张新表,将一年的所有 4 个季度放在一行中?缺失语句的空值。
stock | year | Q1 Earnings | Q2 Earnings | Q3 Earnings | Q4 Earnings
ACME | 2003 | 100 | 200 | Null | Null
ACME | 2004 | NULL | 300 | Null | Null
找到了这个答案:Postgres - Transpose Rows to Columns但它没有显示如何根据另一个值创建和填充新列或处理空值。
解决方案
假设您每年要显示固定的 4 个季度,请使用旋转逻辑:
SELECT
stock,
year,
MAX(amount) FILTER (WHERE statement = 'Q1 Earnings') AS "Q1 Earnings",
MAX(amount) FILTER (WHERE statement = 'Q2 Earnings') AS "Q2 Earnings",
MAX(amount) FILTER (WHERE statement = 'Q3 Earnings') AS "Q3 Earnings",
MAX(amount) FILTER (WHERE statement = 'Q4 Earnings') AS "Q4 Earnings"
FROM statement
GROUP BY
stock,
year;
推荐阅读
- node.js - 使用 cookie-session 设置用户信息
- ios - SwiftUI 电子邮件验证
- excel - 使用整个数组但使用数组中的特定元素时 VBA 下标超出范围错误
- attributeerror - AttributeError: 'function' 对象没有属性 'drop'
- c++ - VSC“格式化文档”搞砸了#include顺序
- git - 以编程方式部署到 Heroku
- javascript - 在 reactjs 中处理多个日期选择器
- c# - UWP:如果文件夹不存在,则在文档文件夹中创建一个文件夹
- typescript - 如何编写 Apollo Server 插件来记录请求及其持续时间
- python - 这两个或多个点之间的最长距离