[英]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.