#sql #vb6
#sql #vb6
Вопрос:
Как мне вычислить и обновить refundamt?
У меня изначально есть эти три строки в базе данных:
NO | TRANAMT | REFUNDAMT
1 | 100 | 0
2 | 200 | 0
3 | 300 | 0
Если возврат равен 350, refundamt будет обновлен следующим образом, refundamt не может быть больше, чем tranamt:
NO | TRANAMT | REFUNDAMT
1 | 100 | 100
2 | 200 | 200
3 | 300 | 50
При повторном возврате с 50 будет обновлена только последняя запись, refundamt будет обновлен следующим образом:
NO | TRANAMT | REFUNDAMT
1 | 100 | 100
2 | 200 | 200
3 | 300 | 100
Комментарии:
1. Я думаю, вам нужно предоставить нам больше информации. Какой код у вас уже есть?
2. Что у меня есть, так это выбрать три строки.
3. Соглашение о переполнении стека заключается в редактировании вопроса, чтобы сделать его лучше в ответ на запрос дополнительной информации. Кроме того, если вы вставите имеющийся у вас код (в идеале только соответствующий контекст), тогда люди смогут дать более конкретный совет.
Ответ №1:
Вот простой алгоритм (без учета многопоточности и блокировок):
- Пусть RF будет общим возвратом
- Найдите первую строку, где REFUNDAMT < TRANAMT и назовите ее ROW
- Вычислите разницу DIFF для СТРОКИ: DIFF = TRANAMT — REFUNDAMT
- Если DIFF >= RF, обновите REFUNDAMT в строке на REFUNDAMT RF, и все готово.
- Если DIFF < RF, обновите REFUNDAMT в строке на TRANAMT, пусть RF = RF-DIFF и перейдите к шагу 2.