问题描述
我在 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
所以我在考虑瓷制宝座时自己想通了。