使用select查询的结果作为交叉表中的列定义列表

e1xvtsh3  于 2021-07-29  发布在  Java
关注(0)|答案(0)|浏览(190)

我已经创建了函数 n_months_crosstab(n) 它以整数作为参数,并返回一个字符串,该字符串以文本形式表示所需的交叉表列:

CREATE OR REPLACE FUNCTION public.n_months_crosstab(n integer)
RETURNS text
LANGUAGE sql
AS $function$ 

with 
dates as (
    select ('"' || to_char(generate_series((now() - interval '1 months'*n)::date, now(), '1 month'), 'Mon-YY') || '"') months)
select concat('"Fund" text,', string_agg(dates.months, ' text,')||' text'::text) from dates;

$function$

正在执行 n=2 给予:

"Fund" text,"May-20" text,"Jun-20" text,"Jul-20" text

如果复制返回值并将其用作交叉表查询列定义列表,则会得到所需的结果。但是,如何使用函数调用来代替它的文本输出呢?
我想做一些类似的事情:

select crosstab.* 
from crosstab('source sql','category sql')
as (select n_months_crosstab(2))

而不是:

select crosstab.* 
from crosstab('source sql','category sql') 
as ("Fund" text,"May-20" text,"Jun-20" text,"Jul-20" text)

这可能吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题