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

Необходимо построить одним запросом, желательно без курсоров.
Есть такие вхдные данные ( через запятую идут столбцы ):
Таблица "Складские остатки":
Склад 01, Товар1, 100 шт.
Склад 02, Товар1, 20 шт.
Склад 02, Товар2, 150 шт.
Склад 02, Товар3, 120 шт.
Склад 03, Товар3, 205 шт.

Таблица "Заказы":
Товар1, 105 шт.
Товар2, 110 шт.
Товар3, 140 шт.

Необходимо на выходе получить таблицу вида:
Склад 01, Товар1, 100 шт.
Склад 02, Товар1, 5 шт.
Склад 02, Товар2, 110 шт.
Склад 02, Товар3, 120 шт.
Склад 03, Товар3, 20 шт.

т.е. нужно перебрать склады и разбить заказы по складам таким образом, если не хватает товара на одном складе, то добирать на следующем, если хватает, то брать с одного и т.д. В перспективе, один товар может лежать на 3 и более складах и их нужно пееребирать, пока не наберется заказ.

Буду очень благодарен за идеи. Заранее спасибо :)
19 май 11, 14:28    [10678365]     Ответить | Цитировать Сообщить модератору
 Re: Интересный запрос  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
PPPPP,

и что у вас не получается?
19 май 11, 14:33    [10678419]     Ответить | Цитировать Сообщить модератору
 Re: Интересный запрос  [new]
PPPPP
Guest
WarAnt
PPPPP,

и что у вас не получается?


Как связать записи в запросе, чтобы они не двоились при разбиении и правильно разбивались
19 май 11, 14:36    [10678455]     Ответить | Цитировать Сообщить модератору
 Re: Интересный запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
PPPPP,

как согласуется "без курсоров" и "нужно перебрать склады"?
19 май 11, 14:44    [10678547]     Ответить | Цитировать Сообщить модератору
 Re: Интересный запрос  [new]
PPPPP
Guest
iap
PPPPP,

как согласуется "без курсоров" и "нужно перебрать склады"?


Вот я и спрашиваю, возможно ли без курсора все это проделать каким нибудь хитрым запросом, потому что через курсор я это делал, не очень красиво :(
19 май 11, 14:47    [10678567]     Ответить | Цитировать Сообщить модератору
 Re: Интересный запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Если действительно без курсоров, то сделайте SELECT с коррелированным подзапросом,
который будет расчитывать количество для текущей строки как разницу между общим
количеством и суммой, распределённой по предыдущим складам.

Правда, как раз для подобных задач курсор может оказаться эффективнее. Но это смотреть надо.
Для >=SQL2005 может пригодиться рекурсивный CTE.
19 май 11, 14:49    [10678585]     Ответить | Цитировать Сообщить модератору
 Re: Интересный запрос  [new]
PPPPP
Guest
ОК, спасибо за ответы :)
Скорее всего останусь на старом варианте...
19 май 11, 14:52    [10678607]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить