gpt4 book ai didi

sql - 我可以在 Pentaho Report Designer 的查询中使用用户定义的数据库函数吗?

转载 作者:行者123 更新时间:2023-11-29 13:37:43 27 4
gpt4 key购买 nike

我正在报告两个表中的数据,这两个表没有合理的连接方式。基本上是一张表中的库存,另一张表中的销售额,我试图通过将两者分开。由于我想不出一种连接表的方法,所以我将一个查询抽象为一个数据库函数并从另一个调用它。

函数定义如下:

CREATE OR REPLACE FUNCTION avgsales(date, text, text, integer) RETURNS numeric
AS ' SELECT sum(quantity)/(65.0*$4/90.0) as thirty_day_avg
FROM data_867 JOIN drug_info
ON drug_info.dist_ndc = trim(leading ''0'' from data_867.product_ndc)
WHERE
rpt_start_dt>= $1-$4 AND
rpt_end_dt<= $1 AND
drug_info.drug_name = $2 AND
wholesaler_name = $3 '
LANGUAGE SQL;

这里是报告查询:

SELECT
(sum("data_852"."za02")/5)/avgsales(date '2010-11-30', 'Semprex D 100ct', 'McKesson', 30) as doh
FROM
"data_852"
JOIN
"drug_info" ON "drug_info"."dist_ndc" = "data_852"."lin03"
JOIN
"wholesaler_info" ON trim("data_852"."isa06") = trim("wholesaler_info"."isa06")
WHERE
(za01 = 'QA'
OR za01 = 'QP'
OR za01 = 'QI')
and "data_852"."xq02">= DATE '2010-11-30'-5
and "data_852"."xq03"<='2010-11-30'
and drug_info.drug_name = 'Semprex D 100ct'
and wholesaler_info.wholesaler_name = 'McKesson'
;

因为它在这里,它将在 Pentaho 报表设计器中运行,但这是硬编码的。当我参数化where 子句的值,它提示 $1 处的语法错误。通过查看查询Postgres 接收,Pentaho 使用 $1、$2 等传递查询及其参数。我认为有可能与我们的函数中使用的相同变量名发生冲突,或者可能只是数据类型问题。

是什么导致了这个错误?是否可以在报表查询中使用这样的函数?如果没有,我如何使用报表设计器做类似的事情?

最佳答案

这是可能的。我正在使用 Postgres 8.4 和 RD 3.7

create function ret_p(text) 
returns text
as
$$
select $1;
$$ language sql immutable;

报表设计器查询

select * from ret_p(${p_val});

其中p_val是RD中定义的参数名

关于sql - 我可以在 Pentaho Report Designer 的查询中使用用户定义的数据库函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4950034/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com