Sql Postgres根据列值将行转换为列
我在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
语句表:
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
显示一些备份值。