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

Откуда:
Сообщений: 101
Есть две таблицы:
одна содержит перечень номенклатур с количеством (ключ номенклатура)
вторая: номенклатура, склад, остаток (ключ номенклатура, склад)

Нужно создать записи в третьей таблице (номенклатура, склад, количество), где количество будет сформировано из остатка второй таблицы. И суммарное значение количества(т.е. остатка) в третьей таблице не будет превышать количества первой таблицы.

К сообщению приложен файл. Размер - 10Kb
6 июл 16, 11:46    [19374469]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с перебором  [new]
iap
Member

Откуда: Москва
Сообщений: 47063
M-stlyle,

как бы нам задание что ли выдал?
6 июл 16, 11:47    [19374476]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с перебором  [new]
M-stlyle
Member

Откуда:
Сообщений: 101
iap,

Запрос нужен, как бы покрасивее его написать)
6 июл 16, 11:49    [19374486]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с перебором  [new]
aleks2
Guest
M-stlyle
iap,

Запрос нужен, как бы покрасивее его написать)

Напиши его в Word - будет красиво.
6 июл 16, 13:38    [19375203]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с перебором  [new]
Megabyte
Member

Откуда: ближайшее заМКАДье
Сообщений: 4985
aleks2
M-stlyle
iap,

Запрос нужен, как бы покрасивее его написать)

Напиши его в Word - будет красиво.

каков вопрос - таков ответ
6 июл 16, 14:07    [19375393]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с перебором  [new]
Евгений Недашковский
Member

Откуда:
Сообщений: 14
M-stlyle
И суммарное значение количества(т.е. остатка) в третьей таблице не будет превышать количества первой таблицы.

А что делать, если привышает? Минусовать? А по какому складу?
6 июл 16, 14:16    [19375443]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с перебором  [new]
Konst_One
Member

Откуда:
Сообщений: 11593
это такой вброс, чтобы ему бесплатно тут сляпали систему управления запасами
6 июл 16, 14:18    [19375455]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с перебором  [new]
M-stlyle
Member

Откуда:
Сообщений: 101
Евгений Недашковский
M-stlyle
И суммарное значение количества(т.е. остатка) в третьей таблице не будет превышать количества первой таблицы.

А что делать, если привышает? Минусовать? А по какому складу?

ничего не делать, сколько набралось из таблицы2 столько и вставлять..
6 июл 16, 14:38    [19375579]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с перебором  [new]
M-stlyle
Member

Откуда:
Сообщений: 101
Konst_One
это такой вброс, чтобы ему бесплатно тут сляпали систему управления запасами

Я разработчик ERP (если знаешь что это)
потребовалось часть кода перенести на SQL.
В ERP такой алгоритм делался бы вложенными запросами (переборами). Вот мне интересно можно ли как-то более оптмизированно сделать это в SQL.
6 июл 16, 14:44    [19375623]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с перебором  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
M-stlyle
Konst_One
это такой вброс, чтобы ему бесплатно тут сляпали систему управления запасами

Я разработчик ERP (если знаешь что это)
потребовалось часть кода перенести на SQL.
В ERP такой алгоритм делался бы вложенными запросами (переборами). Вот мне интересно можно ли как-то более оптмизированно сделать это в SQL.

можно
6 июл 16, 14:52    [19375692]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с перебором  [new]
Konst_One
Member

Откуда:
Сообщений: 11593
есть такие штуки , как CTE, например. поищите примеры тут на форуме, уже готовое что-то было и не раз
6 июл 16, 14:53    [19375701]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с перебором  [new]
Евгений Недашковский
Member

Откуда:
Сообщений: 14
INSERT INTO Table3 (SELECT * FROM Table2)
6 июл 16, 15:04    [19375794]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с перебором  [new]
i-i
Guest
чего набросились не пойму на человека? нарастаюший итог в 2016 году советуют делать через CTE - с дуба рухнули?

есть у меня скрипт для 2008 - если будет тормoзить, первый цте надо заменить на верменную таблицу. для версий 2012 - все цте надо заменить на елементарное sum() over (partition by order by)

declare @n table (id int, kol int)
insert into @n values
(1, 10),
(2, 4)

declare @n1 table (id int, skl varchar(10), kol int)
insert into @n1 values 
(1, '1', 1),
(1, '2', 2),
(1, '3', 9),
(2, '1', 1),
(2, '2', 5),
(2, '3', 9)

;with cte as
(
select id, skl, kol, row_number() over (partition by id order by skl) rn from @n1
)
, 
cte1
as 
(
select id, skl, kol, kol rtot, rn 
from cte where rn = 1
union all
select c.id, c.skl, c.kol, c.kol + c1.rtot, c.rn 
from cte c join cte1 c1 on c.rn = c1.rn + 1 and c.id = c1.id
)

select id, skl, ost
from 
(
select 
c.id, c.skl, case when n.kol - rtot < 0 then c.kol + n.kol - rtot else c.kol end ost
from cte1 c join @n n on c.id = n.id
)
t where ost > 0
order by 1, 2
8 июл 16, 21:47    [19388372]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с перебором  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
declare @a table(name varchar(10),stock varchar(10), res int)
declare @nom table(name varchar(10), summ int)

insert @a 
values('abc','stock1',1),
('abc','stock2',2),
('abc','stock3',9),
('xyz','stock5',1),
('xyz','stock6',3),
('xyz','stock8',8)

insert @nom
values('abc',10),
('xyz',9)


select a1.name,a1.stock
,case when n.summ-sum(a3.res) < 0 then n.summ-sum(a3.res) + a1.res else a1.res end as result
from @a a1 
 join @a a3 on a3.name = a1.name and a1.res >= a3.res 
 join @nom n on n.name = a1.name
 group by a1.name,a1.stock,a1.res,n.summ
8 июл 16, 23:15    [19388669]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с перебором  [new]
982183
Member

Откуда: VL
Сообщений: 3385
M-stlyle
Есть две таблицы:
одна содержит перечень номенклатур с количеством (ключ номенклатура)
вторая: номенклатура, склад, остаток (ключ номенклатура, склад)

Нужно создать записи в третьей таблице (номенклатура, склад, количество), где количество будет сформировано из остатка второй таблицы. И суммарное значение количества(т.е. остатка) в третьей таблице не будет превышать количества первой таблицы.


Предположим в первой таблице с перечнем номенклатуры - остаток 1
Во второй - Остатки по 10 по трем складам

Вопрос - что ставить в таблицу 3?
11 июл 16, 09:35    [19393392]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с перебором  [new]
982183
Member

Откуда: VL
Сообщений: 3385
Т.Е. у вас есть таблица с остатками товаров.
и есть таблицы с заказами.
Соответственно задача - распределить дефицитный товар по заказам.
Сооответсенно надо определить правила распределения.
11 июл 16, 09:38    [19393407]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить