sql - SQL Server OVER() 子句未按预期运行
问题描述
我正在使用该OVER()
子句根据帐号和付款日期获取付款的总金额。然后,我从当前余额中减去该运行总计,以确定每次交易完成后的余额
SELECT
no_,
amount,
SUM(amount) OVER(PARTITION BY no_ ORDER BY effectiveDate DESC) AS RunningTotal,
balance - (SUM(amount) OVER(PARTITION BY no_ ORDER BY effectiveDate DESC)) + amount AS CalculatedBalance,
balance
FROM
c
WHERE
status != 'closed'
ORDER BY
no_
它适用于正数,但是当金额字段为负数时,我会得到如下奇怪的输出:
所有负数都会发生这种情况,我检查了所有正数并且它们是正确的。我在网上查了一下,找不到 OVER() 不接受负数的原因
解决方案
你为什么要反过来计算?我希望逻辑更像这样:
SELECT no_, amount,
SUM(amount) OVER (PARTITION BY no_ ORDER BY effectiveDate ASC) AS RunningTotal,
(balance + amount +
SUM(amount) OVER (PARTITION BY no_ ORDER BY effectiveDate ASC)
) AS CalculatedBalance,
balance
FROM c
WHERE status <> 'closed'
ORDER BY no_;
此外,因为balance
是负数,所以您想要添加金额而不是减去它们。
推荐阅读
- python-3.x - Tkinter callback_Python 中的异常
- r - 将 Rmarkdown 编织到 word.doc:如何避免目录中的目录标题
- php - 在 Woocommerce WC_Product_Query 中使用日期产品自定义字段
- c - CS50 马里奥,代码可以编译但不会做任何事情
- authentication - url 基本身份验证中的反斜杠 (\)
- java - Spinner 使用依赖于另一个 Spinner 的 SQLite 填充
- php - 根据数据库记录或先前的编辑状态将复选框的状态设置为“检查”?
- db2 - 列出节点目录抛出 SQL1027N
- java - 我可以创建开放 API 2 文档(通过 swagger),但我无法创建开放 API 3 文档
- ibm-mq - 如何解决 - MQJE001:发生 MQException:完成代码 2,原因 2009