У меня есть общее значение, которое мне нужно распределить по нескольким строкам в таблице SQL:
DECLARE @total numeric(38,5);
DECLARE @count int;
SET @total=123.10000
SET @count = SELECT COUNT(*) FROM mytable WHERE condition=@val;
-- let's say @count is now 3
UPDATE mytable SET my_part=@total/@count WHERE condition=@val;
--each record now has 41.03333
SELECT SUM(my_part) FROM mytable where condition = @val;
-- the sum is 123.09999, not my original 123.10000
Очевидно, что исходная сумма не делится поровну на 3, поэтому сумма не будет соответствовать исходному значению. И независимо от того, что я использую для масштабирования, будут такие разделы, которые не могут выстраиваться в линию.
Я хотел бы, чтобы одна из строк UPDATEd содержала 41.03334, а две другие - 41.03333. Мне все равно, какие округлить вверх, а какие округлить. Но я забочусь о том, что значения можно пересчитать, чтобы получить исходную сумму. Это возможно? Существуют ли известные алгоритмы для подобных вещей?