Sql Postgres根据列值将行转换为列

Sql Postgres根据列值将行转换为列,sql,postgresql,switch-statement,transpose,crosstab,Sql,Postgresql,Switch Statement,Transpose,Crosstab,我在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 Earnin

我在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

找到了这个答案:但它没有显示如何基于另一个值创建和填充新列,也没有显示如何处理空值。

假设您每年要显示固定的4个季度,请使用数据透视逻辑:

选择
股票
年,
最大(金额)过滤器(其中报表='Q1收益')为“Q1收益”,
最大(金额)过滤器(其中报表='Q2收益')为“Q2收益”,
最大(金额)过滤器(其中报表='Q3收益')为“Q3收益”,
最大(金额)过滤器(其中报表=‘第四季度收益’)为“第四季度收益”
来自声明
分组
股票
年份;

假设您每年要显示固定的4个季度,请使用旋转逻辑:

选择
股票
年,
最大(金额)过滤器(其中报表='Q1收益')为“Q1收益”,
最大(金额)过滤器(其中报表='Q2收益')为“Q2收益”,
最大(金额)过滤器(其中报表='Q3收益')为“Q3收益”,
最大(金额)过滤器(其中报表=‘第四季度收益’)为“第四季度收益”
来自声明
分组
股票
年份;

谢谢。这会自动处理空值吗?如果给定的股票和年份没有某个季度的数据,那么在这种情况下,上面的报告只会报告
NULL
。如果需要,您可以使用
COALESCE
显示一些备份值。谢谢。这会自动处理空值吗?如果给定的股票和年份没有某个季度的数据,那么在这种情况下,上面的报告只会报告
NULL
。如果需要,可以使用
COALESCE
显示一些备份值。