Array
(
)

SOMAR ENTRE TABELAS

Aps
|
MVP
Pontos: 100
    17 dez 2013

Bom dia!!

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:

#Código

        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.
#Código
((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

Isaac Jose
   - 17 dez 2013

amigo bom dia...
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

Aps
|
MVP
Pontos: 100
    17 dez 2013


Citação:
amigo bom dia...
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.

Jefferson Santos
   - 17 dez 2013


Citação:

Citação:
amigo bom dia...
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.

Citação:

Citação:

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...

Isaac Jose
   - 17 dez 2013


Citação:

Citação:
amigo bom dia...
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

Aps
|
MVP
Pontos: 100
    20 dez 2013

Bom dia.

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.

Jefferson Santos
   - 20 dez 2013

Depois do select informe o fim com o "END" e informe o inicio da procedure com "GO".

Faabiianooc
   - 20 dez 2013

exec nome_da_procedure