我已经创建了函数 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)
这可能吗?
暂无答案!
目前还没有任何答案,快来回答吧!