sql - 如何在嵌套的双美元符号交叉表查询中使用 postgres 参数
问题描述
我无法弄清楚如何在 $fn$ $ct_query_1$ 尝试在 where 子句评估中使用 v_id 中添加字符串插值。
create or replace function fnX (
p_id varchar(20)
)
returns table ( a text, b varchar, c varchar, d varchar, e varchar, f varchar)
language plpgsql
as $fn$
declare
DECLARE v_id varchar := p_id ;
begin
return query
select a, b, c, d, e, f
from crosstab(
$ct_query_1$
select distinct
1 as id, s.a, tmp.a
from
"source" s
left join
(
select distinct
tbl.a, tbl.b
from tableA tbl
where tableA.colc = v_id
...
) as tmp on s.source_name = tmp.source
order by 1, 2 asc;
$ct_query_1$,
$a$VALUES ('a'), ('b'), ('c'),('d'), ('e')$a$
) as ct (id int, a varchar(20),b varchar(20) , c varchar(20), d varchar(20), e varchar(20));
end;
$fn$
解决方案
使用format
:
SELECT ...
FROM crosstab(
format(
$ct_query_1$SELECT ...
WHERE tableA.colc = %L
...$ct_query_1$,
v_id
),
$a$VALUES ('a'), ('b'), ('c'), ('d'), ('e')$a$
)
%L
是字符串文字的占位符。
推荐阅读
- php - 子查询返回多于 1 行 - 如何获取行的最后更新日期?
- arrays - 按嵌套对象数组中的属性过滤对象数组
- excel - excel,查找语句地址无效的限定符
- docker - 传递参数/添加映射到正在运行的 docker 容器
- c# - 需要演示有关 DataTypeAttribute 的这种用法(如 Microsoft 教程中所述)
- ios - 触摸移动时找到 UIView 的交集
- javascript - MarkLogic - 如何使用 javascript 有效地过滤序列
- reactjs - 如果使用与打字稿反应,我可以使用 tsx 扩展名来测试文件吗
- r - 如何将每日数据集转换为月度格式中分位数为 95% 的月度数据集?
- javascript - 如何让 HTMLElement.click() 在 Chrome 扩展中工作