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

Откуда:
Сообщений: 19
У меня складской учет. Нужно написать процедуру, которая будет считать остаток. Есть таблица REGISTR, в которой содержаться все движения товаров (data_reg (дата регистрации), id_nakl (id накладной), co (пришло/ушло, 1/0), id_sklad, id_tov (id товара), rest ( кол-во). И таблица SOST_SKL - состояние склада ( id_sklad, id_tov, kol_kon ( кол-во на конец дня), data.
Процедура должна к количеству на конец предыдущего дня прибавлять приход за текущий день ( то что в регистре со значением 1 в CO) и отнимать расход за день ( то что с 0 в CO). И записывать полученный результат в таблицу SOST_SKL.
Посоветовали создать в процедуре временные таблицы, в одной из которых будут товары пришедшие ( с 1) , во второй ушедшие в расход ( с 0). И исходя из этого вычислять!
Помогите, пожалуйста!!! Сам не справлюсь(
29 ноя 11, 20:33    [11680077]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы в процедуре!  [new]
Glory
Member

Откуда:
Сообщений: 104751
SenZhermen
Помогите, пожалуйста!!!

И что конкретно не получается ?

ЗЫ
А зачем тут временные таблицы ?
29 ноя 11, 20:50    [11680140]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы в процедуре!  [new]
SenZhermen
Member

Откуда:
Сообщений: 19
не получается то, что я новичок в этом всем)
Временные таблицы посоветовали, потому что данные для вычислений нужно брать из одной таблицы REGISTR. Если можно обойтись без них, то посоветуйте как, пожалуйста.
вот, попытался процедуру создать. но она не выполняется(
@ID_SKLAD smallint,
@D smalldatetime
as
select r.ID_TOV as тов ,r.DATA_REG as дата , Sum (r.REST) as пр
into #tab
from dbo.REGISTR as r
where CO = 1
Group by r.ID_TOV, r.DATA_REG

select r.ID_TOV as тов , r.DATA_REG as дата , Sum (r.REST) as рас
into #tab1
from dbo.REGISTR as r
where CO = 0
Group by r.ID_TOV, r.DATA_REG

Select s.ID_TOV, (s.KOL_KON+Sum (tab.REST)- Sum(tab1.REST))
From dbo.SOST_SKL as s join
dbo.#tab as tab on s.ID_TOV=tab.ID_TOV join
dbo.#tab1 as tab1 on tab1.ID_TOV=tab.ID_TOV
Where s.ID_SKLAD = @ID_SKLAD and tab.DATA_REG = @D and tab1.DATA_REG = @D Group by s.ID_TOV

drop table #tab
drop table #tab1

И еще не знаю как сделать, чтоб значение получившееся записывалось в таблицу SOST_SKL.
29 ноя 11, 21:02    [11680197]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы в процедуре!  [new]
Glory
Member

Откуда:
Сообщений: 104751
select r.ID_TOV as тов ,r.DATA_REG as дата , Sum (CASE WHEN CO = 1 THEN r.REST WHEN CO = 0 THEN -r.REST) as x
from dbo.REGISTR as r
Group by r.ID_TOV, r.DATA_REG


SenZhermen
И еще не знаю как сделать, чтоб значение получившееся записывалось в таблицу SOST_SKL.

командой INSERT
29 ноя 11, 21:06    [11680211]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы в процедуре!  [new]
SenZhermen
Member

Откуда:
Сообщений: 19
Glory, спасибо!
Этим запросом вернулась таблица с теми же значениями, что и в REGISTR, только у тех товаров, что выбыли, значения с минусом. А как мне теперь KOL_KON из таблицы STAT_SKL сложить со значениями столбца x из этого запроса?
29 ноя 11, 21:21    [11680250]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы в процедуре!  [new]
SenZhermen
Member

Откуда:
Сообщений: 19
процедуру написал, все работает. Но теперь мне надо результат, который получился в А4 перенести в таблицу SOST_SKL, которая содержит в себе id склада, id товара, количество товара ( как раз результат) и дату. я знаю что через insert into надо, но у меня ниче не выходит(( помогите пожалуйста!!!!!
Вот текст процедуры:

@ID_SKLAD smallint,
@D smalldatetime
as
select r.ID_TOV as тов , Sum (r.REST) as пр
into #tab
from dbo.REGISTR as r
where CO = 1 and r.DATA_REG =@D
Group by r.ID_TOV

select r.ID_TOV as тов , Sum (r.REST) as рас
into #tab1
from dbo.REGISTR as r
where CO = 0 and r.DATA_REG =@D
Group by r.ID_TOV

Select s.ID_TOV, isnull (tab.пр,0) - isnull(tab1.рас,0)+ isnull (s.KOL_KON,0) As A4
From dbo.SOST_SKL as s left join
dbo.#tab as tab on s.ID_TOV=tab.тов left join
dbo.#tab1 as tab1 on tab1.тов=s.ID_TOV
Where s.ID_SKLAD = @ID_SKLAD
--Group by s.ID_TOV , tab.пр, tab1.рас

select* from #tab
select* from #tab1

drop table #tab
drop table #tab1
30 ноя 11, 17:56    [11685454]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить