如何基于Creditor-Debit+上一行Balance计算数据表的Balance列?
嘿,这个计算余额的需求很典型,我给你分两种最常用的场景来讲解实现方法,你可以根据自己使用的工具来对应操作:
1. 表格工具(Excel/Google Sheets)实现
首先要注意第一行的Balance,因为没有上一行的Balance可以参考,所以第一行的公式直接是 =Creditor列 - Debit列(对应单元格的话就是 =B2-C2,假设你的表头在第一行,数据从第二行开始)。
从第二行开始,就可以用你说的公式了:=当前行Creditor - 当前行Debit + 上一行Balance,对应单元格的话就是 =B3-C3+D2,写完之后直接下拉填充所有行就行。
这里表格工具会自动把null识别为0,所以不用额外处理空值,最终计算出来的Balance列结果应该是:
| id | Creditor | Debit | Balance |
|---|---|---|---|
| 1 | 100 | null | 100 |
| 2 | 50 | null | 150 |
| 3 | null | 100 | 50 |
| 4 | 50 | null | 100 |
| 5 | null | 20 | 80 |
| 6 | null | 10 | 70 |
| 7 | null | 100 | -30 |
| 8 | 200 | null | 170 |
2. 数据库(SQL)实现
如果你的数据存在数据库表里,那可以用窗口函数来实现累计计算,本质上和你说的公式是等价的——因为每一行的Balance其实是从第一行到当前行所有Creditor-Debit的累计和。
用COALESCE函数把空值null转换成0,避免计算出错,SQL语句如下:
SELECT id, Creditor, Debit, SUM(COALESCE(Creditor, 0) - COALESCE(Debit, 0)) OVER (ORDER BY id) AS Balance FROM your_table;
执行这个语句后,就能得到和上面表格工具一样的Balance结果啦。
内容的提问来源于stack exchange,提问作者forme hasan
相关产品推荐
相关产品推荐

