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

Откуда:
Сообщений: 535
Доброго дня коллеги, с наступающими.
Прошу вашей помощи в решении задачи. Задача состоит в следующем. Есть некий документ A с перечнем артикулов, в котором указан код артикула, количество в позиции, общая стоимость по артикулу:
declare @a table ( id int		--ключ
,                  n  varchar(20)   	--название
,                  k  int			--количество
,                  p  int			--стоимость
)
insert into @a
values ( 1, 'раки', 30, 20 )
insert into @a
values ( 2, 'рыба', 10, 40 )
insert into @a
values ( 3, 'лягушки', 10, 100 )
select *
from @a

Картинка с другого сайта.
Артикулов в документе может быть реально много, тысячи, нужно разбить эти артикула на чеки. При этом на чек накладывается условие, что его общая стоимость не может быть больше, к примеру, 300 и не меньше 100. Желательно получать чеки с общей суммой приближающейся к максимуму в чеке (300).Количество товара по артикулу можно делить на разные чеки, примерные варианты разбиения:
Чек № 1
раки 15 шт = 300 р.

Чек № 2
раки 5 шт = 100 р.
рыба 5 шт = 200 р.

Чек № 3
рыба 	5 шт = 200 р.
лягушки 1 шт = 100 р.

Чек № 4
лягушки 3 шт = 300 р.

Чек № 5
лягушки 3 шт = 300 р.

Чек № 6
лягушки 3 шт = 300 р.


и.т.д. Если после разбивки останется часть товара меньше 100 то его игнорировать.

Как это сделать курсором я знаю, но есть подозрение, что существует метод интересней беганья по курсору. Благодарен за советы.
30 апр 15, 11:04    [17585708]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение перечня артикулов на группы по условию  [new]
Добрый Э - Эх
Guest
Zukora,

разве что почитать про "reset running total" и ег ореализации на SQL. Есть подозрение, что без рекурсивного CTE не обойтись.
30 апр 15, 12:12    [17586288]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение перечня артикулов на группы по условию  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8826
Zukora, задача не для сиквела, она из категории комбинаторики, "Задача о ранце".
30 апр 15, 13:29    [17586881]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение перечня артикулов на группы по условию  [new]
Zukora
Member

Откуда:
Сообщений: 535
Владислав Колосов,

Спасибо всем, наверное так оно и есть - просто запросом не решить, написал курсором. Комбинаторика здесь не нужна т.к. задача не стоит из всех возможных выбрать идеальную комбинацию чеков, а просто создать одну любую не противоречащую условию.
30 апр 15, 14:11    [17587126]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение перечня артикулов на группы по условию  [new]
Павел Воронцов
Member

Откуда: Новосибирск
Сообщений: 2392
Блог
Zukora,

Ищите по форуму слова "задача о рюкзаке", глядишь и найдется что-нибудь. Вот тут например: https://www.sql.ru/forum/56272/zadachka-dlya-guru
30 апр 15, 15:14    [17587682]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить