Home » SQL & PL/SQL » SQL & PL/SQL » Calculate problem , help me
Calculate problem , help me [message #672389] |
Sat, 13 October 2018 00:15  |
 |
zhaoquer
Messages: 35 Registered: October 2013
|
Member |
|
|
create table agent_rate(
agent_id varchar(20),
v_rate NUMBER(18, 4),
m_rate NUMBER(18, 4),
fee NUMBER(18, 4)
);
insert into agent_rate (AGENT_ID, V_RATE, M_RATE, FEE)
values ('1000', 0.0300, 0.0300, 1.0000);
insert into agent_rate (AGENT_ID, V_RATE, M_RATE, FEE)
values ('100001', 0.0400, 0.0500, 1.2000);
insert into agent_rate (AGENT_ID, V_RATE, M_RATE, FEE)
values ('10000101', 0.0600, 0.0900, 1.5000);
-------------
create table trans(
tradeNo char(11),
agent_id varchar(20),
card_type char(1),
txn_amt NUMBER(18, 2)
);
insert into trans (TRADENO, AGENT_ID, CARD_TYPE, TXN_AMT)
values ('20181013001', '1000', 'm', 100.00);
insert into trans (TRADENO, AGENT_ID, CARD_TYPE, TXN_AMT)
values ('20181013002', '1000', 'v', 200.00);
insert into trans (TRADENO, AGENT_ID, CARD_TYPE, TXN_AMT)
values ('20181013004', '100001', 'm', 500.00);
insert into trans (TRADENO, AGENT_ID, CARD_TYPE, TXN_AMT)
values ('20181013005', '100001', 'v', 700.00);
insert into trans (TRADENO, AGENT_ID, CARD_TYPE, TXN_AMT)
values ('20181013004', '1000', 'm', 500.00);
insert into trans (TRADENO, AGENT_ID, CARD_TYPE, TXN_AMT)
values ('20181013005', '1000', 'v', 700.00);
-----------
create table agent_amount(
tradeNo char(11),
agent_id varchar(20),
rate_amount NUMBER(18, 2),
Fee_amount NUMBER(18, 2)
);
insert into agent_amount (TRADENO, AGENT_ID, RATE_AMOUNT, FEE_AMOUNT)
values ('20181013001', '1000', 2.00, 0.20);
insert into agent_amount (TRADENO, AGENT_ID, RATE_AMOUNT, FEE_AMOUNT)
values ('20181013002', '1000', 2.00, 0.20);
insert into agent_amount (TRADENO, AGENT_ID, RATE_AMOUNT, FEE_AMOUNT)
values ('20181013004', '1000', 10.00, 0.20);
insert into agent_amount (TRADENO, AGENT_ID, RATE_AMOUNT, FEE_AMOUNT)
values ('20181013005', '1000', 7.00, 0.20);
insert into agent_amount (TRADENO, AGENT_ID, RATE_AMOUNT, FEE_AMOUNT)
values ('20181013004', '100001', 20.00, 0.30);
insert into agent_amount (TRADENO, AGENT_ID, RATE_AMOUNT, FEE_AMOUNT)
values ('20181013005', '100001', 14.00, 0.30);
commit;
Hi All,
Please help me. Table agent_amount result is what I want from table agent_rate and trans. Thanks in advance!
-
Attachment: 1013.PNG
(Size: 136.15KB, Downloaded 601 times)
|
|
|
|
|
|
|
Re: Calculate problem , help me [message #672395 is a reply to message #672394] |
Sat, 13 October 2018 01:54   |
 |
zhaoquer
Messages: 35 Registered: October 2013
|
Member |
|
|
Hi Michel,
I'd rather change table agent_rate structure , maybe you can understand . Sorry for wasting you time. (English is not my first language ,i try my best to make it clearly)
agent_id 1000 is the parent id of 100001 .
drop table agent_rate;
create table agent_rate(
agent_id varchar(20),
parent_id varchar(20),
v_rate NUMBER(18, 4),
m_rate NUMBER(18, 4),
fee NUMBER(18, 4)
);
insert into agent_rate (AGENT_ID, PARENT_ID, V_RATE, M_RATE, FEE)
values ('1000', '', 0.0300, 0.0300, 1.0000);
insert into agent_rate (AGENT_ID, PARENT_ID, V_RATE, M_RATE, FEE)
values ('100001', '1000', 0.0400, 0.0500, 1.2000);
insert into agent_rate (AGENT_ID, PARENT_ID, V_RATE, M_RATE, FEE)
values ('10000101', '100001', 0.0600, 0.0900, 1.5000);
commit;
|
|
|
|
|
|
|
|
Re: Calculate problem , help me [message #672401 is a reply to message #672400] |
Sat, 13 October 2018 04:01  |
 |
zhaoquer
Messages: 35 Registered: October 2013
|
Member |
|
|
I did it ,thanks again.
select t.tradeno,
t.agent_id,
V1.fee_amount,
CASE
WHEN t.card_type = 'v' THEN
t.txn_amt * V1.v_rate
WHEN t.card_type = 'm' THEN
t.txn_amt * V1.m_rate
END AS rate_amount
from trans t
left join (SELECT t1.agent_id,
(t2.v_rate - t1.v_rate) AS v_rate,
(t2.m_rate - t1.m_Rate) AS m_rate,
(t2.fee - t1.fee) AS fee_amount
FROM agent_rate t1
CROSS JOIN agent_rate t2
WHERE t1.agent_id = t2.parent_id) V1
on t.agent_id = V1.agent_id;
Mod: Please put your code in [code] code here [/code] code tags
[Updated on: Sat, 13 October 2018 05:29] by Moderator Report message to a moderator
|
|
|
Goto Forum:
Current Time: Sun May 28 18:26:00 CDT 2023
|