PostgreSQL可以透视表而不显式定义结果列名和类型吗?

ar7v8xwq  于 2023-02-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(125)

复制a question asked some time ago,但这次使用PostgreSQL:
我有一个类似这样的表:

Month      Site          Val
2009-12    Microsoft      10
2009-11    Microsoft      12
2009-10    Microsoft      13
2009-12    Google         20
2009-11    Google         21
2009-10    Google         22

我想得到一个二维表,为每个站点的月份提供"Val",例如:

Month      Microsoft      Google
2009-12        10           20
2009-11        12           21
2009-10        13           22

在我的例子中,"Site"列有数百个值,这使得在crosstab函数中显式地声明它们的名称和类型(都是相同的类型)变得非常乏味。
知道如何在PostgreSQL中实现吗?

pprl5pva

pprl5pva1#

这实际上是可能的与动态sql功能的Postgres!

DO $$
DECLARE
temp_cols text;
query text;

BEGIN
select string_agg(Site ||' int' , ', ')
into temp_cols
FROM (SELECT DISTINCT Site FROM my_tbl ORDER by Site) AS col_list;

query := 'create table temp_results as 
SELECT * FROM crosstab(
''SELECT Month, Site, Val FROM temp_tbl ORDER BY 1,2'', 
''SELECT DISTINCT Site FROM temp_tbl ORDER by Site'') 
AS ct(Month text, ' || temp_cols ||')';

EXECUTE query;
END $$;

这是所有需要的...

相关问题