sql - 使用选择查询的结果作为交叉表中的列定义列表
问题描述
我创建了一个函数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)
这可能吗?
解决方案
推荐阅读
- python - 有人可以帮我按我想要的方式订购这份清单吗?
- kubernetes - kubernetes 服务在离线(没有互联网)k3s 安装时失败
- angular - 将回调函数作为 ionic-angular 中的路由 [navigationExtras] 参数传递
- macos - 防止 VSCode 修改 $PATH 顺序
- android - 当对象为空时,何时使用 let/run/apply/with/also?
- java - Kotlin 中运算符 :: 的模拟
- sql - 需要了解 pl/sql 中的所有内容
- python - Python 程序给我 StopIteration
- python - 在python中动态访问变量
- linux - 列出写入文件的文件夹的子文件夹