使用动态列名称创建数据透视表

时间:2019-05-21 06:33:16

标签: postgresql pivot-table

我正在创建一个数据透视表,该数据表表示特定年份的崩溃值。目前,我正在为列名创建硬代码以创建数据透视表。无论如何,可以使列名称动态化以创建数据透视表?年存储在数组中 {2018,2017,2016 ..... 2008}

with crash as (
--- pivot table generated for total fatality ---
SELECT * 
FROM crosstab('SELECT b.id, b.state_code, a.year, count(case when a.type = ''Fatal'' then a.type end) as fatality
FROM  '||state_code_input||'_all as a, (select * from source_grid_repository where state_code = '''||upper(state_code_input)||''') as b
where st_contains(b.geom,a.geom) 
group by b.id, b.state_code, a.year
order by b.id, a.year',$$VALUES ('2018'),('2017'),('2016'),('2015'),('2014'),('2013'),('2012'),('2011'),('2010'),('2009'),('2008') $$) 
AS pivot_table(id integer, state_code varchar, fat_2018 bigint, fat_2017 bigint, fat_2016 bigint, fat_2015 bigint, fat_2014 bigint, fat_2013 bigint, fat_2012 bigint, fat_2011 bigint, fat_2010 bigint, fat_2009 bigint, fat_2008 bigint)
)

在上面的代码中,fat_2018,fat_2017,fat_2016等被硬编码。我需要fat_之后的几年才能保持活力。

1 个答案:

答案 0 :(得分:0)

不可能。 PostgreSQL是严格类型系统。结果是一个表(关系)。该表的格式(列,列名,列类型)应在执行查询之前(在计划时间内)定义。因此,您无法为Postgres编写任何查询以返回动态列数。