Usuário com melhor resposta
Update com informações de duas tabelas diferentes

Pergunta
-
Boa tarde,
Preciso atualizar o preço de custo em uma tabela de venda, baseado com o preço que o produto entrou.
Por exemplo:
Tabela de Venda:
Data - Produto - Custo
01/05/2013 - 12345 - 1,00
02/05/2013 - 12345 - 1,00
03/05/2013 - 12345 - 1,50
04/05/2013 - 12345 - 2,00
Tabela de entrada de notas:
Entrou duas notas,
01/05/2013 - 12345 - 2,00
04/05/2013 - 12345 - 5,00
Então preciso que na tabela de venda ficasse da seguinte forma.
01/05/2013 - 12345 - 2,00
02/05/2013 - 12345 - 2,00
03/05/2013 - 12345 - 2,00
04/05/2013 - 12345 - 5,00
Nota-se que não vou ter nota de entrada todos os dias, porém posso ter venda, então levaria em consideração a ultima nota que entrou com a data mais proxima para arrumar o preço.
Alguem pode me ajudar?
Grato
Respostas
-
Boa tarde,
Experimente mais ou menos dessa forma:
update v set Custo = ( select top 1 Custo from Notas as n where n.Produto = v.Produto and n.Data <= v.Data order n.Data desc ) from Venda as v
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Andre_Paulo quinta-feira, 16 de maio de 2013 18:51
-
Olá,
O que precisas de fazer é, em primeiro lugar, criar a query com os resultados esperados. Depois é só fazer o Update.
Assim:
USE tempdb; GO -- Cria tabelas para teste CREATE TABLE Venda (Data DATE, Produto INT, Custo NUMERIC(10, 2)); CREATE TABLE Notas (Data DATE, Produto INT, Custo NUMERIC(10, 2)); -- Insere os dados de teste INSERT INTO Venda VALUES ('20130501', 12345, 1.00), ('20130502', 12345, 1.00), ('20130503', 12345, 1.50), ('20130504', 12345, 2.00); INSERT INTO Notas VALUES ('20130501', 12345, 2.00), ('20130504', 12345, 5.00); -- Mostra os resultados pretendidos SELECT V.Data, V.Produto, (SELECT TOP 1 N.Custo FROM Notas N WHERE N.Produto = V.Produto AND N.Data <= V.Data ORDER BY Data DESC) FROM Venda V -- Faz o Update à tabela Venda UPDATE Venda SET Custo = T.Custo FROM ( SELECT V.Data, V.Produto, (SELECT TOP 1 N.Custo FROM Notas N WHERE N.Produto = V.Produto AND N.Data <= V.Data ORDER BY Data DESC) AS Custo FROM Venda V ) T WHERE Venda.Data = T.Data AND Venda.Produto = T.Produto -- E... "Voilá", os resultados esperados SELECT * FROM Venda; -- Elimina as tabelas temporárias DROP TABLE Venda; DROP TABLE Notas;
Espero ter ajudado,
Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.
Pedro Martins
Portugal
https://www.linkedin.com/in/rechousa- Sugerido como Resposta Junior Galvão - MVPMVP quinta-feira, 16 de maio de 2013 18:33
- Marcado como Resposta Andre_Paulo quinta-feira, 16 de maio de 2013 18:52
Todas as Respostas
-
Boa tarde,
Experimente mais ou menos dessa forma:
update v set Custo = ( select top 1 Custo from Notas as n where n.Produto = v.Produto and n.Data <= v.Data order n.Data desc ) from Venda as v
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Andre_Paulo quinta-feira, 16 de maio de 2013 18:51
-
Olá,
O que precisas de fazer é, em primeiro lugar, criar a query com os resultados esperados. Depois é só fazer o Update.
Assim:
USE tempdb; GO -- Cria tabelas para teste CREATE TABLE Venda (Data DATE, Produto INT, Custo NUMERIC(10, 2)); CREATE TABLE Notas (Data DATE, Produto INT, Custo NUMERIC(10, 2)); -- Insere os dados de teste INSERT INTO Venda VALUES ('20130501', 12345, 1.00), ('20130502', 12345, 1.00), ('20130503', 12345, 1.50), ('20130504', 12345, 2.00); INSERT INTO Notas VALUES ('20130501', 12345, 2.00), ('20130504', 12345, 5.00); -- Mostra os resultados pretendidos SELECT V.Data, V.Produto, (SELECT TOP 1 N.Custo FROM Notas N WHERE N.Produto = V.Produto AND N.Data <= V.Data ORDER BY Data DESC) FROM Venda V -- Faz o Update à tabela Venda UPDATE Venda SET Custo = T.Custo FROM ( SELECT V.Data, V.Produto, (SELECT TOP 1 N.Custo FROM Notas N WHERE N.Produto = V.Produto AND N.Data <= V.Data ORDER BY Data DESC) AS Custo FROM Venda V ) T WHERE Venda.Data = T.Data AND Venda.Produto = T.Produto -- E... "Voilá", os resultados esperados SELECT * FROM Venda; -- Elimina as tabelas temporárias DROP TABLE Venda; DROP TABLE Notas;
Espero ter ajudado,
Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.
Pedro Martins
Portugal
https://www.linkedin.com/in/rechousa- Sugerido como Resposta Junior Galvão - MVPMVP quinta-feira, 16 de maio de 2013 18:33
- Marcado como Resposta Andre_Paulo quinta-feira, 16 de maio de 2013 18:52
-