我有 N 列:A、B、C、.. N 每列都是小数 (8,2)。 我想编写一个存储过程,它接受一个行 ID 和一个小数点 (8,2) X。
我希望它递减 A 直到 A 达到零或直到它减少 X。如果 A 达到零并且 X 大于 A 那么我想将 B 递减 X - A 的原始值等等。
例子:
select * from foo_table where id = 0;
| id| A | B | C |..
+---+---+---+---+
| 0 | 5 | 3 | 2 |
call my_stored_proc(0,9);
select * from foo_table where id = 0;
| id| A | B | C |..
+---+---+---+---+
| 0 | 0 | 0 | 1 |
执行此操作的推荐和高效方法是什么?
最佳答案
鉴于您的示例数据,此查询完成了这项工作:
UPDATE t
JOIN (
SELECT
t.id,
GREATEST(A - @a, 0) A,
@a := GREATEST(@a - A, 0),
GREATEST(B - @a, 0) B,
@a := GREATEST(@a - B, 0),
GREATEST(C - @a, 0) C,
@a := GREATEST(@a - C, 0)
FROM
t
, (SELECT @a := 9) var_init_subquery
WHERE id = 0
ORDER BY id
) sq ON t.id = sq.id
SET t.A = sq.A
, t.B = sq.B
, t.C = sq.C;
关于mysql - 如何跨多个列进行级联递减,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34391394/