【发布时间】:2011-06-30 13:56:50
【问题描述】:
我正在接受一组交易和金额,我想创建一个新的金额列,具有以下逻辑--
- 检查到目前为止的(新)总金额。
- 如果将此金额添加到之前的总计中会使总计小于零,则新的金额字段应为零。否则,它应该等于旧金额。
这是我正在寻找的示例 --
Item Record Old amount New Amount Running Total
1 1 100 100 100
1 2 -100 -100 0
1 3 -200 0 0
1 4 500 500 500
1 5 -300 -300 200
1 6 300 300 500
我的跑步总和从零开始。
我的第一个金额是 100,这不等于总数
我的第二个数量是 -100,这不会使我的运行总数 100 变为
我的第三个金额是 -200。这将使 0 到 -200,
我的第四个金额是 500。它通过了。
我的第五个金额是 -300。这需要 500 到 200 的运行总数,仍然 >= 0。它通过了。
我的第六个金额是 300。它通过了,我的最终金额总计为 500。
困难的部分是像这里的记录五这样的情况。为了知道最终运行总计不会低于零,您需要已经计算了记录 3 的新总计。
我认为您可以通过设置公用表表达式来进行递归查询,但我对如何创建它感到困惑。如果可能的话,我想避免使用游标。
【问题讨论】:
-
没有看到你是如何进行计算的,很难确定。为什么不能使用
MAX( (runningtotal - amount), 0 )?