如何在相同的 table 中获得差异金额?

How to get difference amount with in the same table?

我在编写 oracle 查询方面需要帮助。
我有一个数据,如附图所示。

图像中有 3 列,例如 sernoaccorderbalance

我想推导另一列称为差异,推导是前两行余额总和 - 接下来两行余额总和,就像我需要得到差异的所有行一样。

例如,如图所示,差值应计算为前两行余额数据 - 后两行余额数据的差值,即 (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            
...

如果每对行中的余额可能不同 - 所以它们不一定重复 - 那么它会有点复杂,但情况似乎并非如此。