SQL-запрос пересчитывает промежуточные суммы - PullRequest
1 голос
/ 30 июня 2011

Я беру набор транзакций и сумм и хочу создать новый столбец суммы со следующей логикой -

  1. Проверьте текущую сумму (новых) сумм на данный момент.
  2. Если при добавлении этой суммы к предыдущему итогу сумма будет меньше нуля, поле новой суммы должно быть равно нулю. В противном случае он должен быть равен старому количеству.

Вот пример того, что я ищу -

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.

Я думаю, что вы можете сделать это, настроив общие табличные выражения для создания рекурсивного запроса, но я задумался над тем, как именно это создать. Если возможно, я бы хотел избежать курсоров.

1 Ответ

0 голосов
/ 30 июня 2011

это WINDOW FUNCTION решение с оператором обтекания CASE.

поиск LAG

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...