【压测数据准备:达梦数据库的列合并查询】

问题描述:
在这个表中存在这样的数据组:
多条数据含有同样的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!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值