Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Распределение чисел  [new]
rebel25
Member

Откуда:
Сообщений: 98
declare @plan table (id int IDENTITY(1,1) NOT NULL, days_plan int NULL);

insert into @plan (days_plan) values (7);
insert into @plan (days_plan) values (14);

declare @rest table (id int IDENTITY(1,1) NOT NULL, days_rest int NULL);

insert into @rest (days_rest) values (-3);
insert into @rest (days_rest) values (7);
insert into @rest (days_rest) values (19);
insert into @rest (days_rest) values (28);

В таблице @plan могут числа 7,14,21,28.
В таблице @rest могут быть положительные и отрицательные целые числа.

Из таблицы @plan последовательно считываются числа. Каждое число нужно распределить по строкам таблицы @rest так чтобы сумма чисел @rest равнялась этому числу. Строки @rest можно разбивать.
Поясню на примере.

Берётся число 7
1-я строка @rest: 7 - - 3 осталось 10 - т к число из @rest отрицательное - оно увеличит количество остатка, но из него самого вычесть нечего.
2-я строка @rest: 10 - 7 осталось 3
3-я строка @rest: 3 - 19 Здесь 7 закончилось, и осталось 16.
Берём следующее число 14
3-я строка @rest: 14 - 16 Здесь закончилось 14, и осталось 2
3-я строка @rest: 2 если дальше чисел в @plan нет - записываем оставшийся остаток с id строки 3
4-я строка @rest: 28 на последнюю строку распределять нечего, она остаётся без изменений.

Итак, на выходе:

ID rezult
1 | -3
2 | 7
3 | 3
3 | 14
3 | 2
4 | 28
24 окт 11, 09:16    [11486923]     Ответить | Цитировать Сообщить модератору
 Re: Распределение чисел  [new]
aleks2
Guest
Ну научитесь, чтоль, рекурсивному CTE.
И не парьте людям мозг.
24 окт 11, 10:52    [11487279]     Ответить | Цитировать Сообщить модератору
 Re: Распределение чисел  [new]
rebel25
Member

Откуда:
Сообщений: 98
aleks2,
У меня пока не получается разобраться с рекурсией... ну не программист я... а время не ждёт. Так что прошу помощи в решении моей тривиальной задачи.
25 окт 11, 12:43    [11494612]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить