簡體   English   中英

父子合計 Oracle SQL

[英]Parent and Child Total in Oracle SQL

我正在尋找 Child 到 Parent 的總計

雖然我能夠得到兒童總數,但任何人都可以協助以下相同的是

代碼 親子 TERM_LOAN_TOTAL1
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腳本

-- 創建表 create table CLTTBL ( account_number VARCHAR2(35), amount_disbursed NUMBER ) tablespace test pctfree 10 inittrans 1 maxtrans 255 storage ( initial 64K next 1M minextents 1 maxextents unlimited );

提示 Importing table clttbl... set feedback off set define off insert into clttbl (ACCOUNT_NUMBER, AMOUNT_DISBURSED) values ('001SBTL221390016', 100000);

插入 clttbl (ACCOUNT_NUMBER, AMOUNT_DISBURSED) 值 ('001SBTL221500006', 85000);

插入 clttbl (ACCOUNT_NUMBER, AMOUNT_DISBURSED) 值 ('001SBTL221430007', 100000);

插入 clttbl (ACCOUNT_NUMBER, AMOUNT_DISBURSED) 值 ('001SBTL221390011', 100000);

插入 clttbl (ACCOUNT_NUMBER, AMOUNT_DISBURSED) 值 ('001SBTL221390012', 100000);

插入 clttbl (ACCOUNT_NUMBER, AMOUNT_DISBURSED) 值 ('001SBTL221500003', 80000);

插入 clttbl (ACCOUNT_NUMBER, AMOUNT_DISBURSED) 值 ('001SBTL221430004', 100000);

插入 clttbl (ACCOUNT_NUMBER, AMOUNT_DISBURSED) 值 ('001SBTL221390003', 10000000);

插入 clttbl (ACCOUNT_NUMBER, AMOUNT_DISBURSED) 值 ('001SBTL221430003', 80000);

插入 clttbl (ACCOUNT_NUMBER, AMOUNT_DISBURSED) 值 ('001SBTL221390010', 100000);

插入 clttbl (ACCOUNT_NUMBER, AMOUNT_DISBURSED) 值 ('001SBTL221390019', 85000);

插入 clttbl (ACCOUNT_NUMBER, AMOUNT_DISBURSED) 值 ('001SBTL221430002', 50000);

插入 clttbl (ACCOUNT_NUMBER, AMOUNT_DISBURSED) 值 ('001SBTL221400002', 100000);

插入 clttbl (ACCOUNT_NUMBER, AMOUNT_DISBURSED) 值 ('001SBTL221390004', 100000);

插入 clttbl (ACCOUNT_NUMBER, AMOUNT_DISBURSED) 值 ('001SBTL221390017', 100000);

插入 clttbl (ACCOUNT_NUMBER, AMOUNT_DISBURSED) 值 ('001SBTL221390018', 100000);

插入 clttbl (ACCOUNT_NUMBER, AMOUNT_DISBURSED) 值 ('001SBTL221430006', 100000);

插入 clttbl (ACCOUNT_NUMBER, AMOUNT_DISBURSED) 值 ('001SBTL221400001', 85000);

插入 clttbl (ACCOUNT_NUMBER, AMOUNT_DISBURSED) 值 ('000SBTL222130004', 10000000);

插入 clttbl (ACCOUNT_NUMBER, AMOUNT_DISBURSED) 值 ('000SBTL221390001', 5000000);

插入 clttbl (ACCOUNT_NUMBER, AMOUNT_DISBURSED) 值 ('000SBTL221390003', 10000000);

插入 clttbl (ACCOUNT_NUMBER, AMOUNT_DISBURSED) 值 ('000SBTL221390007', 10000000);

插入 clttbl (ACCOUNT_NUMBER, AMOUNT_DISBURSED) 值 ('000SBTL222130003', 5000000);

提示完成。

MIS 表插入


create table gltm_mis_cd ( PRNT VARCHAR2(35), CHLD VARCHAR2(35), CODE_DESC VARCHAR2(35), ) 表空間測試 pctfree 10 inittrans 1 maxtrans 255 storage ( initial 64K next 1M minextents 1 maxextents unlimited );

提示 Importing table gltm_mis_cd... set feedback off set define off insert into gltm_mis_cd (PRNT, CHLD, CODE_DESC) values ('40100: AGRICULTURE', null, 'AGRICULTURE');

插入 gltm_mis_cd (PRNT, CHLD, CODE_DESC) values (null, '40110: Crop Production', 'Crop Production');

插入 gltm_mis_cd (PRNT, CHLD, CODE_DESC) values (null, '40120: Poultry and lasticity', 'Poultry and lasticity');

插入 gltm_mis_cd (PRNT, CHLD, CODE_DESC) values (null, '40130: Fishing', 'Fishing');

插入 gltm_mis_cd (PRNT, CHLD, CODE_DESC) values (null, '40140: Plantation', 'Plantation');

插入 gltm_mis_cd (PRNT, CHLD, CODE_DESC) values (null, '40150: Agro Services', 'Agro Services');

插入 gltm_mis_cd (PRNT, CHLD, CODE_DESC) values (null, '40160: Cash Crop', 'Cash Crop');

插入 gltm_mis_cd (PRNT, CHLD, CODE_DESC) 值 ('40200: MINING AND QUARRYING', null, 'MINING AND QUARRYING');

插入 gltm_mis_cd (PRNT, CHLD, CODE_DESC) values (null, '40210: Metal: Tin, Iron, etc', 'Metal: Tin, Iron, etc');

插入 gltm_mis_cd (PRNT, CHLD, CODE_DESC) values (null, '40220: Non-metal Quarrying', 'Non-metal Quarrying');

插入 gltm_mis_cd (PRNT, CHLD, CODE_DESC) values (null, '40230: Others', 'Others');

提示完成。

父母合計

這個問題中缺少很多東西來給出 excat 答案,但也許(與所有其他表和它們之間的鏈接)你只需要 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)

結果

客戶盡職調查 打印 CHLD TERM_LOAN_TOTAL_1 期
40100 40100:農業 11565000
40110 40110:農作物生產
40120 40120:家禽和牲畜 11565000
40130 40130:釣魚
40140 40140:種植園
40150 40150:農業服務
40160 40160:經濟作物

問候...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM