SQL de Select e Update complexa
Olá pessoal... estou aqui com um pequeno problema... sei resolvê-lo de uma forma mais trabalhosa, porém gostaria de saber se algum de vocês consegue contribuir com uma forma mais fácil de resolver isso.
Seguinte... tenho uma tabela de Pedidos e outra tabela de Produto_Pedido... onde são armazenados os itens, quantidades e valores dos produtos se relacionam a um unico pedido realizado por um cliente. O que preciso é Cancelar um pedido, sendo que a quantidade de todos estes itens deverá ser reposta no estoque... ou seja, se cancelo o pedido numero 5, vou até a tabela de Produto_Pedido relaciono todos os itens do pedido 5 e preciso devolver as quantidades a cada item da tabela de PRODUTOS no campo estoque. Pergunto, há alguma forma de fazer tudo isso numa única SQL? Tipo, fazer um Select de todos os itens do Pedido 5 e fazer um Update na tabela de produtos somando Produto.QuantidadeAtual + ItemPedido.Quantidade ??
Tabelas envolvidas:
PEDIDOS PRODUTO_PEDIDO PRODUTOS
+ CODIGO * COD_PEDIDO + CODIGO
* COD_PRODUTO DESCRICAO
QUANTIDADE ESTOQUE
VLR_UNITARIO
Fico no aguardo e desde já, obrigado pelas ajudas
Maikel
Seguinte... tenho uma tabela de Pedidos e outra tabela de Produto_Pedido... onde são armazenados os itens, quantidades e valores dos produtos se relacionam a um unico pedido realizado por um cliente. O que preciso é Cancelar um pedido, sendo que a quantidade de todos estes itens deverá ser reposta no estoque... ou seja, se cancelo o pedido numero 5, vou até a tabela de Produto_Pedido relaciono todos os itens do pedido 5 e preciso devolver as quantidades a cada item da tabela de PRODUTOS no campo estoque. Pergunto, há alguma forma de fazer tudo isso numa única SQL? Tipo, fazer um Select de todos os itens do Pedido 5 e fazer um Update na tabela de produtos somando Produto.QuantidadeAtual + ItemPedido.Quantidade ??
Tabelas envolvidas:
PEDIDOS PRODUTO_PEDIDO PRODUTOS
+ CODIGO * COD_PEDIDO + CODIGO
* COD_PRODUTO DESCRICAO
QUANTIDADE ESTOQUE
VLR_UNITARIO
Fico no aguardo e desde já, obrigado pelas ajudas
Maikel
Maikel Scheid
Curtidas 0
Respostas
Maikel Scheid
07/05/2010
Desformatou a organização das tabelas do tópico anterior, seguem agora as mesmas organizadas uma abaixo da outra:
Tabelas envolvidas:
PEDIDOS
+ CODIGO
PRODUTO_PEDIDO
* COD_PEDIDO
* COD_PRODUTO
QUANTIDADE
VLR_UNITARIO
PRODUTOS
+ CODIGO
DESCRICAO
ESTOQUE
Tabelas envolvidas:
PEDIDOS
+ CODIGO
PRODUTO_PEDIDO
* COD_PEDIDO
* COD_PRODUTO
QUANTIDADE
VLR_UNITARIO
PRODUTOS
+ CODIGO
DESCRICAO
ESTOQUE
GOSTEI 0
Emerson Nascimento
07/05/2010
tente sempre passar o maior número possível de informações a respeito do
problema.
como você está na sala DELPHI, fica difícil adivinhar qual o banco de dados você está utilizando, e essa é uma informação crucial, visto que os bancos de dados têm características distintas.
de qualquer forma, vou te passar uma instrução que deve funcionar no SQL Server (talvez funcione no FB 2.x):
UPDATE PROD SET
PROD.ESTOQUE = PROD.ESTOQUE + PEDI.QUANTIDADE
FROM
PEDIDOS PED
INNER JOIN
PRODUTO_PEDIDO PEDI ON PEDI.COD_PEDIDO = PED.CODIGO
INNER JOIN
PRODUTOS PROD ON PROD.CODIGO = PEDI.COD_PRODUTO
WHERE
PED.CODIGO = NUMERO_DO_PEDIDO_CANCELADO
ou assim:
UPDATE PROD SET
PROD.ESTOQUE = PROD.ESTOQUE + PEDI.QUANTIDADE
FROM
PRODUTOS PROD
INNER JOIN
PRODUTO_PEDIDO PEDI ON PEDI.COD_PRODUTO = PROD.CODIGO
INNER JOIN
PEDIDOS PED ON PED.CODIGO = PEDI.COD_PEDIDO
WHERE
PED.CODIGO = NUMERO_DO_PEDIDO_CANCELADO
como você está na sala DELPHI, fica difícil adivinhar qual o banco de dados você está utilizando, e essa é uma informação crucial, visto que os bancos de dados têm características distintas.
de qualquer forma, vou te passar uma instrução que deve funcionar no SQL Server (talvez funcione no FB 2.x):
UPDATE PROD SET
PROD.ESTOQUE = PROD.ESTOQUE + PEDI.QUANTIDADE
FROM
PEDIDOS PED
INNER JOIN
PRODUTO_PEDIDO PEDI ON PEDI.COD_PEDIDO = PED.CODIGO
INNER JOIN
PRODUTOS PROD ON PROD.CODIGO = PEDI.COD_PRODUTO
WHERE
PED.CODIGO = NUMERO_DO_PEDIDO_CANCELADO
ou assim:
UPDATE PROD SET
PROD.ESTOQUE = PROD.ESTOQUE + PEDI.QUANTIDADE
FROM
PRODUTOS PROD
INNER JOIN
PRODUTO_PEDIDO PEDI ON PEDI.COD_PRODUTO = PROD.CODIGO
INNER JOIN
PEDIDOS PED ON PED.CODIGO = PEDI.COD_PEDIDO
WHERE
PED.CODIGO = NUMERO_DO_PEDIDO_CANCELADO
GOSTEI 0
Maikel Scheid
07/05/2010
opa... desculpe Emerson, esqueci de colocar o banco de dados... foi mal
É justamente para SQL Server... no ambiente Delphi for .NET... ainda não testei a SQL, mas pela análise da sua SQL, creio de deve funcionar... logo mais faço a instrução e vou testar nas minhas páginas e volto a postar o resultado.
Obrigado pela ajuda...
Abraço
É justamente para SQL Server... no ambiente Delphi for .NET... ainda não testei a SQL, mas pela análise da sua SQL, creio de deve funcionar... logo mais faço a instrução e vou testar nas minhas páginas e volto a postar o resultado.
Obrigado pela ajuda...
Abraço
GOSTEI 0
Maikel Scheid
07/05/2010
Emerson... acabei de testar o código na minha aplicação... funcionou 100%...
Problema resolvido... mais uma vez... muito obrigado pela sua ajuda.
Abraço
Maikel
Problema resolvido... mais uma vez... muito obrigado pela sua ajuda.
Abraço
Maikel
GOSTEI 0