Oracle SQL中的父项和子项合计

zwghvu4y  于 2022-11-03  发布在  Oracle
关注(0)|答案(1)|浏览(249)

我在寻找积累的总子在父
虽然我能够得到孩子总可以任何一个协助为相同的以下是
| 代码|父母子女|期限_贷款_总计1|
| - -|- -|- -|
| 小行星40100|:农业|所需值11565000|
| | 40110:作物生产||
| | 40120:家禽和家畜|小行星11565000|
| | 40130:钓鱼||
| | 40140:种植园||
| | 第40150章:不一样||
| | 40160:经济作物||
| 小行星40200|:采矿及采石||
下面是我的SQL查询

select cdd, prnt, chld, term_loan_total1
 from (SELECT x.mis_code cdd,
               CASE
                 WHEN x.mis_code LIKE '%00' THEN
                  to_char(lpad(nvl(x.mis_code, 0), 5, ':') || '   :  ' ||
                          x.code_desc)
               END prnt,
               CASE
                 WHEN x.mis_code NOT LIKE '%00' THEN
                  to_char(lpad(nvl(x.mis_code, 0), 5, ':') || '   :  ' ||
                          x.code_desc)
               END chld,

               (select sum(ct.amount_disbursed)
                  from cltb_account_master ct
                  left join mitm_customer_default mic
                    on ct.customer_id = mic.customer
                  left join gltm_mis_code msc
                    on mic.cust_mis_2 = msc.mis_code
                 where ct.product_code not in ('SBAD')
                   and msc.mis_code = x.mis_code) term_loan_total1
           FROM gltm_mis_code x
         WHERE mis_class in ('CBN_SUBS', 'CBN_SECT')
         group by x.mis_code, x.code_desc
         order by x.mis_code)
 group by cdd, prnt, chld, term_loan_total1
 order by cdd

为两个表附加CRUD脚本
--创建表创建表CLTTBL(account_number VARCHAR 2(35),amount_dispensed NUMBER)表空间测试pctfree 10个初始化事务1个最大事务255个存储(初始64 K,下一个1 M最小扩展区1个最大扩展区无限制);
提示导入表clttbl...设置反馈抵销设置定义抵销插入到clttbl(ACCOUNT_NUMBER,AMOUNT_DISBURSED)值('001 SBTL 221390016',100000);
在clttbl(账户_编号,已支付金额)中插入值('001 SBTL 221500006',85000);
插入到clttbl(账户_编号,已支付金额)值('001 SBTL 221430007',100000);
插入到clttbl(账户_编号,已支付金额)值('001 SBTL 221390011',100000)中;
插入到clttbl(账户_编号,已支付金额)值('001 SBTL 221390012',100000);
在clttbl(账户_数量,已支付金额)中插入值('001 SBTL 221500003',80000);
插入到clttbl(账户_编号,已支付金额)值('001 SBTL 221430004',100000);
在clttbl(账户_编号,已支付金额)中插入值('001 SBTL 221390003',10000000);
插入到clttbl(账户_编号,已支付金额)值('001 SBTL 221430003',80000)中;
插入到clttbl(账户_编号,已支付金额)值('001 SBTL 221390010',100000);
插入到clttbl(账户_数量,已支付金额)值('001 SBTL 221390019',85000);
插入到clttbl(账户_编号,已支付金额)值('001 SBTL 221430002',50000);
在clttbl(账户_编号,已支付金额)中插入值('001 SBTL 221400002',100000);
插入到clttbl(账户_编号,已支付金额)值('001 SBTL 221390004',100000)中;
插入clttbl(账户_编号,已支付金额)值('001 SBTL 221390017',100000);
插入到clttbl(账户_编号,已支付金额)值('001 SBTL 221390018',100000)中;
插入到clttbl(账户_编号,已支付金额)值('001 SBTL 221430006',100000);
在clttbl(账户_数量,已支付金额)中插入值('001 SBTL 221400001',85000);
在clttbl(账户_编号,已支付金额)中插入值('000 SBTL 222130004',10000000);
在clttbl(账户_编号,已支付金额)中插入值('000 SBTL 221390001',5000000);
在clttbl(账户_编号,已支付金额)中插入值('000 SBTL 221390003',10000000);
在clttbl(账户_编号,已支付金额)中插入值('000 SBTL 221390007',10000000);
在clttbl(账户_编号,已支付金额)中插入值('000 SBTL 222130003',5000000);
提示完成。
MIS表格插入
创建表gltm_mis_cd(PRNT VARCHAR 2(35),CHLD VARCHAR 2(35),CODE_DESC VARCHAR 2(35),)表空间测试pctfree 10个初始化事务1个最大事务255个存储空间(初始64 K,接下来的1 M个最小扩展区1个最大扩展区不受限制);
提示导入表格gltm_mis_cd...设置反馈偏移设置定义偏移插入到gltm_mis_cd(PRNT,CHLD,CODE_DESC)值('40100:农业',空,'农业');
插入到gltm_mis_cd(打印机、CHLD、代码描述)值(空值,'40110:作物生产》、《作物生产》);
插入到gltm_mis_cd(打印机、CHLD、代码描述)值(空值,'40120:家禽和家畜“、”家禽和家畜“);
插入到gltm_mis_cd(打印机、CHLD、代码描述)值(空,'40130:渔捞“、”渔捞“);
插入到gltm_mis_cd(打印机、CHLD、代码描述)值(空,'40140:种植园“、”种植园“);
插入到gltm_mis_cd(打印机、CHLD、代码描述)值(空值,'40150:农业服务“、”农业服务“);
插入到gltm_mis_cd(打印机、CHLD、代码描述)值(空,'40160:经济作物“、”经济作物“);
插入到gltm_mis_cd(打印、CHLD、代码描述)值中(“40200:采矿和采石',null,'采矿和采石');
插入到gltm_mis_cd(打印机、CHLD、代码描述)值(空,'40210:金属:锡、铁等“、”金属:锡、铁等);
插入到gltm_mis_cd(打印机、CHLD、代码描述)值(空,'40220:“非金属采石”、“非金属采石”);
插入到gltm_mis_cd(打印机、CHLD、代码描述)值(空,'40230:其他“、”其他“);
提示完成。
parent Total

j0pj023g

j0pj023g1#

在这个问题中,有很多东西没有给予正确的答案,但是(对于所有其他表和它们之间的链接),您可能只需要CASE表达式就可以解决问题。下面只是您可以使用它的许多方法中的一个示例。
有关CASE表达式的更多信息,示例位于https://www.oracletutorial.com/oracle-basics/oracle-case/
为了完成你的工作,你应该添加你自己的表和连接,以及调整WHERE,GROUP BY和ORDER BY子句。最重要的是编写你自己的CASE表达式。在这个例子中,我使用固定值,因为没有来自你其他表的样本数据。希望你可以得到一点推动在正确的方向上通过这个...

Select
    SubStr(Nvl(g.PRNT, g.CHLD), 1, 5) "CDD",
    g.PRNT "PRNT",
    g.CHLD "CHLD",
    Sum(CASE WHEN Nvl(SubStr(g.CHLD, 1, 5), '40120') = '40120' THEN c.AMOUNT_DISBURSED END) "TERM_LOAN_TOTAL_1"
From
    GLTM_MIS_CD g
Inner Join
    CLTTBL c ON(1=1 And SubStr(c.ACCOUNT_NUMBER, 1, 3) = '001')
Where
    SubStr(Nvl(g.PRNT, g.CHLD), 1, 3) = '401'
Group By
    SubStr(Nvl(g.PRNT, g.CHLD), 1, 5),
    g.PRNT,
    g.CHLD
Order By
    SubStr(Nvl(g.PRNT, g.CHLD), 1, 5)

测试结果
| CDD编码|打印|儿童|期限_贷款_总计_1|
| - -|- -|- -|- -|
| 小行星40100| 40100:农业||小行星11565000|
| 小行星40110| |40110:作物生产||
| 小行星40120| |40120:家禽和家畜|小行星11565000|
| 小行星40130| |40130:钓鱼||
| 小行星40140| |40140:种植园||
| 小行星40150||第40150章:不一样||
| 小行星40160| |40160:经济作物||
此致。

相关问题