问题描述:
在这个表中存在这样的数据组:
多条数据含有同样的pay_cert_id、pay_cert_no,但是每条数据的pay_app_id,pay_app_no不同,具体业务为一条主数据拥有若干条附属数据,
在并发压测中需要一次性在请求中传入一个pay_cert_id、no、agency_code、agency_id和五个pay_app_id、no,需要先从数据库中将这几个参数查出来,然后导出成txt文件来进行csv文件的查询传参
orcale中有group_cancat函数能比较好的直接通过SQL查询出来,但是经过资料查询和尝试后发现达梦数据库中没有类似的函数来进行列合并查询,
因此采用构建函数的方法来进行SQL查询,先构造两个函数来引用:
/***Manager***/
CREATE OR REPLACE
FUNCTION "SHCZ_YSGL_YSZX"."CHTOROW"
(
"CHID" IN VARCHAR
(
255))
RETURN VARCHAR
(
1000) AUTHID DEFINER
is
declare
result varchar(1000):='';
begin
for cur in
(
select pay_app_id from pay_voucher where pay_cert_id=chid
)
loop
result:=result||','||cur.pay_app_id;
end loop;
return ltrim(result, ',');
end;
create or replace
function chtorow1
(
chid varchar
(
255))
return varchar
(
1000)
is
declare
result varchar(1000):='';
begin
for cur in
(
select pay_app_no from pay_voucher where pay_cert_id=chid
)
loop
result:=result||','||cur.pay_app_no;
end loop;
return ltrim(result, ',');
end;
函数构建完成之后可以直接在数据库查询SQL中引用,具体查询SQL如下:
select
distinct(
voucher.pay_cert_id),
voucher.pay_cert_no,
voucher.agency_code,
voucher.agency_name,
a.pay_app_id ,
b.pay_app_no
from
(
select
pay_cert_id,
chtorow(pay_cert_id) pay_app_id
from
pay_voucher
where
payee_acct_name = '上海市生物医药产业促进中心'
group by
pay_cert_id
order by
pay_cert_id
)
a
left join
(
select
pay_cert_id,
chtorow1(pay_cert_id) pay_app_no
from
pay_voucher
where
payee_acct_name = '上海市生物医药产业促进中心'
group by
pay_cert_id
order by
pay_cert_id
)
b
on
a.pay_cert_id = b.pay_cert_id
left join
(
select
agency_code,
agency_name,
pay_cert_id,
pay_cert_no
from
pay_voucher
where
payee_acct_name = '上海市生物医药产业促进中心'
)
voucher
on
b.pay_cert_id = voucher.pay_cert_id;
问题解决,over!!!