2 列的运行余额/总计

问题描述

我在 Azure MSsql 中有下表:

身份证, 收费, 付款

ID 是主键并且是唯一的,Charge 和 Payment 是数字。

身份证收费支付
1 10 空
2 空 10
3 40 空
4 空 30

我想做以下查询

select *,SUM(charge)-sum(payment) OVER (order by id) AS Balance
from Table T
order by id asc

以上数据样本中的内容如下所示:

ID 收费支付余额
1 10 空 10
2 空 10 0
3 40 空 40
4 空 30 10

但是该查询失败,抱怨我需要添加一个 Group by 子句,但是如果我运行以下内容

select *,SUM(charged) OVER (order by id) AS totalCharged
from table
order by id

效果很好 - 我觉得我错过了一些明显的东西。

我还应该注意到,最终查询中还有其他列,但由于它们与逻辑无关,因此在此处省略。

解决方法

事实证明,我遗漏了一些明显的东西。 我将源查询更改为使用 0 而不是 Null,然后执行以下操作:

select *,SUM(charged - payment) OVER (order by id) AS balance
from table
order by id

所以我在考虑瓷制宝座时自己想通了。