如何在相同的 table 中获得差异金额?
How to get difference amount with in the same table?
我在编写 oracle 查询方面需要帮助。
我有一个数据,如附图所示。
图像中有 3 列,例如 serno
、accorder
、balance
。
我想推导另一列称为差异,推导是前两行余额总和 - 接下来两行余额总和,就像我需要得到差异的所有行一样。
例如,如图所示,差值应计算为前两行余额数据 - 后两行余额数据的差值,即 (43801 + 43801) - (103397.25+103397.25)
你可以尝试使用 case 语句如下
Select serNo,
( SUM(CASE accorder_
when 1 then balance
else 0 end)
- SUM(case.accorder_
when 2 then balance
else 0 end)) as finalAmount
from table name
group by serNo
您可以使用analytic lead()
function查看相关行并计算差异;假设您只想要相同 serno
和 'next' 行之间的差异由 accorder
:
定义
select serno, accorder, balance,
balance - lead(balance, 2)
over (partition by serno order by accorder) as diff
from t42
order by serno, accorder;
SERNO ACCORDER BALANCE DIFF
---------- ---------- ---------- ----------
1 1 43801 -59596.25
1 1 43801 -59596.25
1 2 103397.25
1 2 103397.25
2 1 73058737.2
2 1 73058737.2
3 1 30711.94
3 1 30711.94
4 1 436414.01
4 1 436414.01
您的行似乎重复的原因并不明显。如果您希望两个值的总差如问题中的计算所示 - (43801 + 43801) - (103397.25+103397.25)
- 那么您可以将计算出的差加倍:
2 * (balance - lead(balance, 2)
over (partition by serno order by accorder)) as diff
SERNO ACCORDER BALANCE DIFF
---------- ---------- ---------- ----------
1 1 43801 -119192.5
1 1 43801 -119192.5
1 2 103397.25
...
如果每对行中的余额可能不同 - 所以它们不一定重复 - 那么它会有点复杂,但情况似乎并非如此。
我在编写 oracle 查询方面需要帮助。
我有一个数据,如附图所示。
图像中有 3 列,例如 serno
、accorder
、balance
。
我想推导另一列称为差异,推导是前两行余额总和 - 接下来两行余额总和,就像我需要得到差异的所有行一样。
例如,如图所示,差值应计算为前两行余额数据 - 后两行余额数据的差值,即 (43801 + 43801) - (103397.25+103397.25)
你可以尝试使用 case 语句如下
Select serNo,
( SUM(CASE accorder_
when 1 then balance
else 0 end)
- SUM(case.accorder_
when 2 then balance
else 0 end)) as finalAmount
from table name
group by serNo
您可以使用analytic lead()
function查看相关行并计算差异;假设您只想要相同 serno
和 'next' 行之间的差异由 accorder
:
select serno, accorder, balance,
balance - lead(balance, 2)
over (partition by serno order by accorder) as diff
from t42
order by serno, accorder;
SERNO ACCORDER BALANCE DIFF
---------- ---------- ---------- ----------
1 1 43801 -59596.25
1 1 43801 -59596.25
1 2 103397.25
1 2 103397.25
2 1 73058737.2
2 1 73058737.2
3 1 30711.94
3 1 30711.94
4 1 436414.01
4 1 436414.01
您的行似乎重复的原因并不明显。如果您希望两个值的总差如问题中的计算所示 - (43801 + 43801) - (103397.25+103397.25)
- 那么您可以将计算出的差加倍:
2 * (balance - lead(balance, 2)
over (partition by serno order by accorder)) as diff
SERNO ACCORDER BALANCE DIFF
---------- ---------- ---------- ----------
1 1 43801 -119192.5
1 1 43801 -119192.5
1 2 103397.25
...
如果每对行中的余额可能不同 - 所以它们不一定重复 - 那么它会有点复杂,但情况似乎并非如此。