我在撰写oracle查询时需要帮助 我有一个如附图所示的数据。
在图片中我有3列,如serno
,accorder
,balance
。
我想得到另一个名为差异的列,其中派生是前两行余额之和 - 接下来的两行平衡总和,就像我需要获得差异的所有行一样。
例如,如图所示,差异应计算为前两行平衡数据的差异 - 接下来两行的余额数据,即(43801 + 43801) - (103397.25 + 103397.25)
答案 0 :(得分:0)
您可以尝试使用案例陈述,如下所示
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
答案 1 :(得分:0)
您可以使用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
...
如果每对行中的余额可能不同 - 所以它们不一定重复 - 那么它会有点复杂,但似乎并非如此。