Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

jerlanio

Somar dados de uma tabela em outra no mesmo banco

Recommended Posts

Boa tarde,

Sou novo no forum e preciso muito da ajuda de todos.

Preciso inserir apenas uma vez o valor que contem no campo Qtde da tabela1 no campo Qtde_total da tabela2 no mesmo banco de dados.

 

O exemplo é mais ou menos assim:

tabela1:

Produto lote Qtde

10 1 5

10 2 6

10 3 4

 

tabela2:

Produto Qtde_total

10 15

 

Hoje a tabela2 esta aparecendo no campo Qtde_total o valor "0"

 

utilizei o comando:

UPDATE tabela2 SET Qtde_total = SUM(Qtde) from tabela1 group by Produto

 

mais não deu certo.

Alguem pode me ajudar?

Desde já agradeço.

Jerlânio Mota

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde,

Sou novo no forum e preciso muito da ajuda de todos.

Preciso inserir apenas uma vez o valor que contem no campo Qtde da tabela1 no campo Qtde_total da tabela2 no mesmo banco de dados.

 

O exemplo é mais ou menos assim:

tabela1:

Produto lote Qtde

10 1 5

10 2 6

10 3 4

 

tabela2:

Produto Qtde_total

10 15

 

Hoje a tabela2 esta aparecendo no campo Qtde_total o valor "0"

 

utilizei o comando:

UPDATE tabela2 SET Qtde_total = SUM(Qtde) from tabela1 group by Produto

Acho que não expliquei o que realmente necessito.

No exemplo acima na tabela1 o codigo do produto é o mesmo, porem cada linha tem uma quantidade e lote diferente. Já na tabela 2 esse mesmo produto irá ocupar apenas uma linha e quantidade total dos tres lotes do mesmo produto contido na tabela1.

 

Jerlânio Mota

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio ser isto, não tenho como testar aqui no trabalho pois não tenho SqlServer e o Oracle não aceita esta síntaxe.

 

UPDATE tabela2 SET Qtde_total = select SUM(Qtde) from tabela1 where tabela1.produto = tabela2.produto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Jerlanio

Criei as tabelas no SqlServer e fiz a query que o Motta passou, as dá um erro, então fiz alterações que ficaram assim:

UPDATE table_2 SET table_2.qtdetot = (select SUM(Qtde) from table_1 where table_1.item = table_2.itemtot)

Desta forma não dá erro, mas não faz o que vc quer. Sabe por que?

O UPDATE vai atualizar na tabela2 caso o produto já esteja registrado lá.

Faça o teste com esta instrução, mas antes insira um registro na tabela 2 com o produto 10 e total=0 e execute.

O certo seria usar o comando INSERT com sua devida sintaxe.

Tem um site bacana que uso para sanar eventuais dúvidas, além do iMasters claro!

http://www.w3schools.com/SQl/sql_insert.asp

Abc

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde Renato,

Fiz alguns testes com a query e da erro mesmo inserindo o produto na tabela2 com total=0, o erro acusa que o campo nao pode ser nulo. Estou tentando com o comando INSERT mas ainda se sucesso.

 

obrigado pelas dicas.

 

Att.

Jerlânio Mota

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que :

 

ISNULL resolva

 

 


UPDATE table_2 SET table_2.qtdetot = (select ISNULL(SUM(Qtde),0) from table_1 where table_1.item = table_2.itemtot)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde Motta,

Acertou em cheio, o camando ISNULL resolveu meu problema.

Muito obrigado pela força.

 

Atenciosamente,

Jerlânio Mota

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue um exemplo básico de UPDATE FROM.

Note que no meu exemplo, só vai atualizar os produtos que tem na TABELA2:

 

  if object_id ('tempdb..#tabela1') is not nulldrop table #tabela1   if object_id ('tempdb..#tabela2') is not nulldrop table #tabela2   create table #tabela1 (Produto int, lote int, Qtde int)insert into #tabela1 values (10,1,5)insert into #tabela1 values (10,2,6)insert into #tabela1 values (10,3,4) create table #tabela2 (Produto int , Qtde_total int) insert into #tabela2 (Produto) values (10)insert into #tabela2 (Produto) values (15)  update #tabela2set #tabela2.Qtde_Total = t1.sum_qtyfrom #tabela2 t2 inner join(select Produto, sum(Qtde) as sum_qtyfrom #tabela1group by Produto) as t1on t1.produto = t2.produto select * from #tabela2 
Boa sorte

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde A.Jr

a query abaixo atualiza apenas os produtos que tem na tabela2 e isso é muito bom.

tanto a sua query quanto a query do Motta fazem o que eu preciso, porem quando vou fazer um lançamento do produto via sistema volta tudo ao quer era antes.

Exemplo: a tabela2 o produto 10 esta com o campo Qtde_total com valor '0'. na tabela1 tabela1 este mesmo produto em seu somatorio tem 8 produtos. Quando executo a query você me passou ou a que o Motta passou é inserido o somatório da tabela1 normalmente, porem quando entro no sistema e faço um lançamento (entrada) do produto 10 com Qtde 2 (nesse caso eles irão primeiro para a tabela1) na tabela2 ficarão apenas no campo Qtde_total o valor 2 lançado pelo sistema e não a soma do que ja tinha na tabela2 (8) mais o valor lançado pelo sistema (2), ou seja a tabela2 depois de tudo isso deveria aparecer no campo Qtde_total o valor 10.

 

atenciosomente,

Jerlânio Mota

 

Segue um exemplo básico de UPDATE FROM.

Note que no meu exemplo, só vai atualizar os produtos que tem na TABELA2:

 

if object_id ('tempdb..#tabela1') is not nulldrop table #tabela1if object_id ('tempdb..#tabela2') is not nulldrop table #tabela2create table #tabela1 (Produto int, lote int, Qtde int)insert into #tabela1 values (10,1,5)insert into #tabela1 values (10,2,6)insert into #tabela1 values (10,3,4) create table #tabela2 (Produto int , Qtde_total int)insert into #tabela2 (Produto) values (10)insert into #tabela2 (Produto) values (15) update #tabela2set #tabela2.Qtde_Total = t1.sum_qtyfrom #tabela2 t2 inner join(select Produto, sum(Qtde) as sum_qtyfrom #tabela1group by Produto) as t1on t1.produto = t2.produtoselect * from #tabela2
Boa sorte

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok.

Veja o exemplo abaixo.

é o mesmo select, insert, e o que muda é o UPDATE. Agora tenho dois, que é uma atualização.

 

if object_id ('tempdb..#tabela1') is not nulldrop table #tabela1if object_id ('tempdb..#tabela2') is not nulldrop table #tabela2create table #tabela1 (Produto int, lote int, Qtde int)insert into #tabela1 values (10,1,5)insert into #tabela1 values (10,2,6)insert into #tabela1 values (10,3,4) create table #tabela2 (Produto int , Qtde_total int)insert into #tabela2 (Produto) values (10)insert into #tabela2 (Produto) values (15) select 'PRIMEIRO UPDATE'update #tabela2set #tabela2.Qtde_Total = (isnull(t1.sum_qtd1,0) + isnull(t3.sum_qtde2,0))from #tabela2 t2 inner join(select Produto, sum(Qtde) as sum_qtd1from #tabela1group by Produto) as t1on t1.produto = t2.produtoinner join (select Produto, sum(Qtde_Total) as sum_qtde2from #tabela2group by Produto) as t3on t1.produto = t3.produto select 'primeiro UPDATE', * from #tabela2 select 'ATUALIZACAO' update #tabela2set #tabela2.Qtde_Total = (isnull(t1.sum_qtd1,0) + isnull(t3.sum_qtde2,0))from #tabela2 t2 inner join(select Produto, sum(Qtde) as sum_qtd1from #tabela1group by Produto) as t1on t1.produto = t2.produtoinner join (select Produto, sum(Qtde_Total) as sum_qtde2from #tabela2group by Produto) as t3on t1.produto = t3.produto  
select 'ATUALIZACAO', * from #tabela2

 

Com esta lógica, acho que consegue montar o que precisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde A.Jr,

após o update as informações ficam da forma que preciso.

Quando lanço valores a partir do aplicativo o problema persiste.

se na tabela2 ja existir algum valor no campo quantidade, ao executar a query acima as atualizações são executadas com perfeição. Após a atualização se eu entro no sistema e lanço um valor qualquer, as informações inseridas pela atualização somem da tabela2 ficando apenas na tabela1.

 

vou fazer uma parte via comando a outra pelo sistema pois o cliente já esta querendo utilizar essas informações o mais rapido possivel.

 

obrigado mais uma vez pela atenção.

 

atenciosamente,

Jerlânio Mota

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.