--递归
CREATE OR REPLACE FUNCTION recursion_func(in_序号 NUMBER) RETURN NUMBER IS
v_sum NUMBER;
v_借方金额 NUMBER;
v_贷方金额 NUMBER;
BEGIN
SELECT 借方金额,贷方金额 INTO v_借方金额,v_贷方金额 FROM table_name;
IF in_序号 <= 1 THEN
v_sum := 期初金额;
ELSE
v_sum := recursion_func(in_序号 -1) + v_借方金额 - v_贷方金额;
END IF;
RETURN v_sum;
END;
--将上边执行了,再执行下面的,自己修改一下
SELECT 序号,借方金额,方向,贷方金额,recursion_func(序号) FROM table_name
SQL不直接支持这种递加的求和方式,可以建临时表,通过游标先算出每行的余额(其实就是有当前记录行前所有历史数据的SUM(借方金额-贷方金额)+期初余额),然后再与你这个表关联,得到你想要的结果。
select 科目编码,sum(余额)
from 统计科目余额表
where len(科目编码)=3 and 方向='借'
group by 科目编码