Я беру набор транзакций и сумм и хочу создать новый столбец суммы со следующей логикой -
- Проверьте текущую сумму (новых) сумм на данный момент.
- Если при добавлении этой суммы к предыдущему итогу сумма будет меньше нуля, поле новой суммы должно быть равно нулю. В противном случае он должен быть равен старому количеству.
Вот пример того, что я ищу -
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, и она не берет сумму <0, поэтому я передаю ее и устанавливаю
новая сумма до 100. </p>
Моя вторая сумма равна -100, и это не означает, что мой текущий итог от 100 до <0, поэтому я установил новую сумму на -100. </p>
Моя третья сумма -200. Для этого потребуется промежуточное значение от 0 до -200, <0. Таким образом, я установил новую сумму на 0. </p>
Моя четвертая сумма - 500. Она проходит через.
Моя пятая сумма -300. Для этого потребуется промежуточный итог от 500 до 200, который по-прежнему> = 0. Он проходит через.
Моя шестая сумма - 300. Она проходит, и у меня остается итоговая сумма 500.
Сложная часть в таких случаях, как пятая запись здесь. Чтобы знать, что итоговая итоговая сумма не будет ниже нуля, вам нужно уже рассчитать новую сумму для записи 3.
Я думаю, что вы можете сделать это, настроив общие табличные выражения для создания рекурсивного запроса, но я задумался над тем, как именно это создать. Если возможно, я бы хотел избежать курсоров.