SOMAR ENTRE TABELAS
17/12/2013
0
Tenho um Banco de Dados de um dos nossos sistemas que guarda informações entre transações de equipamentos de informática de nossa empresa e da oficina.
Entre as transações estão Entrada e Saída de produtos em um estoque.
As tabelas estão assim dispostas:
dbo.Empresa( Cod_Empresa(PK,char(1), not null) Nom_Empresa(varchar(50), not null) Descricao(varchar(150), not null) ) dbo.Entrada_Itens( Cod_Empresa(PK, FK, char(1), not null) Cod_Estoque(PK, FK, varchar(2), not null) Cod_Produto(PK, FK, varchar(5), not null) Qtde(int, not null) V_Unit(money, not null) V_Total(money not null) Id_Entrada(PK, FK, varchar(7), not null) dbo.Estoque( Cod_Empresa(PK, FK, char(1), not null) Cod_Estoque(PK, FK, varchar(2), not null) Cod_Produto(PK, FK, varchar(5), not null) Qtde_Minima(int, null) Preco_medio(money, null) Qtde_Estoque(int, not null) Total(Money, null) ) dbo.Produto( Cod_Empresa(PK, FK, char(1), not null) Cod_Estoque(PK, varchar(2), not null) Cod_Produto(PK, varchar(5), not null) Descricao(varchar(150), not null dbo.Saida_Itens( Cod_Empresa(PK, FK, char(1), not null) Data_Said(datetime, not null) Cod_Produto(PK, FK, varchar(5), not null) Qtde(int, not null) V_Unit(money, not null) V_Total(money not null) Id_Saida(PK, FK, varchar(7), not null)
Esse é um pequeno esboço do banco e o que eu preciso fazer é que em uma coluna ESTOQUE o valor 'Quant_Estoque' da tabela Estoque seja atualizado por linha a cada entrada ou saída.
Pensei em usar um Select (id_linha ROW NUMBER() over (order by ID) From e dentro disso uma sub query que ja tenho criada que faz o cálculo de somar o estoque inicial, as entradas e abater as saidas, conforme o código abaixo.
((SELECT SUM(ESI.Qtde) FROM Entrada_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01')AND (ESI.Cod_Produto = '00322')AND (ESI.Cod_Empresa = '1')AND (S.Dta_Entrada Between '2007-07-31 00:00:00' AND '2012-12-31 00:00:00')) +(SELECT SUM (EST.Qtde_Estoque) FROM Estoque AS EST WHERE (EST.Cod_Estoque = '01')AND (EST.Cod_Produto = '00322')AND (EST.Cod_Empresa = '1')) -(SELECT SUM(ESI.Qtde) FROM Saida_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1') AND (S.Dta_Entrada Between '2007-07-31 00:00:00' AND '2007-12-31 Porem não funcionou dessa forma.00:00:00')))AS ESTOQUE,
Porem não funcionou dessa forma.
O código acima já é da query que faz o cálculo e está em funcionamento, por isso talvez as informações esteja diferentes mas a ideia é essa.
Alguém poderia ajudar a solucionar esse solicitação?
Desde já agradeço a atenção.
Obrigado.
Paulo Romeiro
Instituicao Social
Posts
17/12/2013
Isaac Jose
quando tenho esses questoes procuro atualizar com o update se o seu select estiver te trazendo o resultado correto faça como o exemplo a baixo dando update no seu campo..
update b
set b.Vlr = a.Vlr + b.Vlr
from (
select a
from a
where
tintDia = (select MAX (a.tintDia) from a )and
tintMes = (select MAX (a.tintMes) from a ) and
BintAno = (select MAX (a.BintAno) from a ))
as a inner join b on
a = b
17/12/2013
Instituicao Social
quando tenho esses questoes procuro atualizar com o update se o seu select estiver te trazendo o resultado correto faça como o exemplo a baixo dando update no seu campo..
update b
set b.Vlr = a.Vlr + b.Vlr
from (
select a
from a
where
tintDia = (select MAX (a.tintDia) from a )and
tintMes = (select MAX (a.tintMes) from a ) and
BintAno = (select MAX (a.BintAno) from a ))
as a inner join b on
a = b
Olá Isaac.
Não entendi bem.
Uma pergunta... A e B são entradas e SAídas do Estoque?
Obrigado.
17/12/2013
Jefferson Santos
quando tenho esses questoes procuro atualizar com o update se o seu select estiver te trazendo o resultado correto faça como o exemplo a baixo dando update no seu campo..
update b
set b.Vlr = a.Vlr + b.Vlr
from (
select a
from a
where
tintDia = (select MAX (a.tintDia) from a )and
tintMes = (select MAX (a.tintMes) from a ) and
BintAno = (select MAX (a.BintAno) from a ))
as a inner join b on
a = b
Olá Isaac.
Não entendi bem.
Uma pergunta... A e B são entradas e SAídas do Estoque?
Obrigado.
Olá Isaac.
Não entendi bem.
Uma pergunta... A e B são entradas e SAídas do Estoque?
Obrigado.
A e B estão representando as tabelas...
17/12/2013
Isaac Jose
quando tenho esses questoes procuro atualizar com o update se o seu select estiver te trazendo o resultado correto faça como o exemplo a baixo dando update no seu campo..
update b
set b.tabelaestoqueVlr = a.tabelado.Vlr + b.Vlr
from (
select a
from a
where
tintDia = (select MAX (a.tintDia) from a )and
tintMes = (select MAX (a.tintMes) from a ) and
BintAno = (select MAX (a.BintAno) from a ))
as a inner join b on
a = b
Olá Isaac.
Não entendi bem.
Uma pergunta... A e B são entradas e SAídas do Estoque?
Obrigado.
são as tabelas que vc utiliza para fazer o select e afetar o campo da tabela estoque...
inclui no select acima um exemplo
20/12/2013
Instituicao Social
Consegui chegar ao resultado de uma forma semelhante, porem não consigo adicinar esse solução na query que é chamada no formulário.
Criei uma procedure para realizar a tarefa e gostaria de saber como chamar uma procedure dentro de uma query?
Obrigado.
20/12/2013
Jefferson Santos
Clique aqui para fazer login e interagir na Comunidade :)
Inserção de url