sql 科目余额表

如:
序号 借方金额 方向 贷方金额 余额
期初金额 200

1 4000 借方 0 4200
2 3000 借方 0 7200
3 0 借方 1000 6200
4 0 借方 500 5700
第一行余额的计算方式=期初金额+借方金额-贷方金额
第二行余额的计算方式=第一行余额+借方金额-贷方金额
第三行余额的计算方式=第二行余额+借方金额-贷方金额
以此类推,余额的计算方式该怎么用sql写呢。

第1个回答  2014-09-22
--递归
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

第2个回答  2014-09-22
SQL不直接支持这种递加的求和方式,可以建临时表,通过游标先算出每行的余额(其实就是有当前记录行前所有历史数据的SUM(借方金额-贷方金额)+期初余额),然后再与你这个表关联,得到你想要的结果。
第3个回答  2014-09-22
select 科目编码,sum(余额)
from 统计科目余额表
where len(科目编码)=3 and 方向='借'
group by 科目编码追问

不对

本回答被网友采纳
相似回答