我在表格中列出了付款交易。这包括付款逆转。付款撤销没有被标记,所以我必须推断,如果扣除等于现有交易,则是逆转
我只想要计算未被撤销的交易。
E.g来自交易金额列表。
5 五 -5(这是一个5交易的逆转,因此一个5交易仍然有效) 10 -10(对于10个交易,这是逆转,因此没有10个交易有效) 15 15 15 -15(这是15个交易的逆转,所以两个15交易有效) 20
我想要一个
列表5 15 15 20
即我有四笔未被撤销的交易。
这是一些测试代码,我的尝试没有用。
CREATE TABLE check_minus
(
name_id NUMBER(4),
trans NUMBER(4),
val NUMBER(2)
);
insert into check_minus values (1,1,5);
insert into check_minus values (1,2,5);
insert into check_minus values (1,3,-5);
insert into check_minus values (1,4,10);
insert into check_minus values (1,5,-10);
insert into check_minus values (1,6,15);
insert into check_minus values (1,7,15);
insert into check_minus values (1,8,15);
insert into check_minus values (1,9,-15);
insert into check_minus values (1,10,20);
commit;
-- using not in
select name_id, val from check_minus
where val > 0 -- positive transactions
and (name_id, val) not in
(
select name_id, abs(val) val from check_minus
where val < 0 -- negative transactions
);
-- using minus
select name_id, val from check_minus
where val > 0 -- positive transactions
minus
select name_id, abs(val) from check_minus
where val < 0 -- negative transactions
答案 0 :(得分:3)
减号操作使用不同的集合。试试这个:
select row_number() over (partition by name_id, val order by name_id, val), name_id, val
from check_minus
where val > 0
minus
select row_number() over (partition by name_id, val order by name_id, val), name_id, abs(val)
from check_minus
where val < 0
它产生:
RowNum Name_Id Val
1, 1, 20
2, 1, 5
2, 1, 15
3, 1, 15