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

Откуда:
Сообщений: 5
+ Запрос
-----надо продать 15 штук
declare @to_sale table(itemid int,qty int)
insert into @to_sale 
select 1,35
union all
select 2,36
union all
select 3,1

-----на складе 2 партии товара 
declare @store table(itemid int,qty int,partid int)
insert into @store
select 3,11,1
union all
select 2,11,1
union all
select 2,10,2
union all
select 2,13,3
union all
select 2,10,4
union all
select 2,10,5
union all
select 1,11,1
union all
select 1,10,2
union all
select 1,13,3
union all
select 1,10,4
union all
select 1,10,5;
;

 with cte 
as
(
   select itemid,partid,qty,(select sum(qty) from @store s1 where s.itemid=s1.itemid and s.partid>=s1.partid) as tot
   from @store s   
)
-------списываем с хранилища 
select
  
   case when s.qty-(tot-c.qty)>c.qty then 0
       when s.qty-(tot-c.qty)<=0      then c.qty
       else (tot-s.qty)
  end as Ostatkiafter, 
  c.itemid,c.partid

from cte c join @to_sale s 
on c.itemid=s.itemid
WHERE  (case when s.qty-(tot-c.qty)>c.qty then 1
       when s.qty-(tot-c.qty)<=0      then 0
       else 1
  end) = 1
ORDER by itemid,partid;

Нужно сделать что-то типа
 with cte 
as
(
   select itemid,partid,qty,(select sum(qty) from @store s1 where s.itemid=s1.itemid and s.partid>=s1.partid) as tot
   from @store s   
)
-------списываем с хранилища 
UPDATE @store SET qty,itemid,partid FROM (
select
  
   case when s.qty-(tot-c.qty)>c.qty then 0
       when s.qty-(tot-c.qty)<=0      then c.qty
       else (tot-s.qty)
  end as Ostatkiafter, 
  c.itemid,c.partid

from cte c join @to_sale s 
on c.itemid=s.itemid
WHERE  (case when s.qty-(tot-c.qty)>c.qty then 1
       when s.qty-(tot-c.qty)<=0      then 0
       else 1
  end) = 1
ORDER by itemid,partid;)


Ну то есть что бы вывод первого запроса, был обвёрнут в update, не знаю как реализовать
1 июл 14, 01:11    [16241391]     Ответить | Цитировать Сообщить модератору
 Re: Нужно из запроса WITH CTE SELECT сделат  [new]
Takes
Member [заблокирован]

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

То есть из WITH CTE SELECT сделать WITH CTE UPDATE FROM SELECT
1 июл 14, 01:14    [16241394]     Ответить | Цитировать Сообщить модератору
 Re: Нужно из запроса WITH CTE SELECT сделат  [new]
Glory
Member

Откуда:
Сообщений: 104760
Уважаемый Kimel
Если появится еще один клон, то временный бан превратится в постоянный.
1 июл 14, 01:33    [16241408]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить