Pergunta de exercício de SQL

SQL

05/09/2019

Esses dias me deparei com uma questão de exercicio de SQL que não soube responder. Será que alguém pode ajudar?
(Se puderem, além de escrever a consulta, explicar o racional por trás, melhor ainda!). Exercício abaixo:

Dadas as seguintes tabelas, com as seguintes especificações:

Tabela Preço
Campo, Tipo
Material, Int
Cliente, Int
Data, Int
Preço, Float


Tabela Estoque
Campo, Tipo
Material, Int
Cliente, Int
Data, Int
Estoque, Float
Valor de Estoque, Float

*Em ambos os casos, o campo 'Data' segue esse modelo = 20150504

Atualize o campo 'Valor de Estoque' da tabela 'Estoque' usando a seguinte lógica:
-Se houver mais de um Preço para uma mesma combinação de Cliente e Material, utilize o que tiver a data mais recente.
-Se não houver um Preço para um Cliente, considere o mais recente para o Material
-Se não houver um preço, valor do estoque deverá ser NULL

'Valor de Estoque' = Estoque * Preço
André Carreiro

André Carreiro

Curtidas 0

Melhor post

Emerson Nascimento

Emerson Nascimento

06/09/2019

acredito que essa instrução deva fazer o que você precisa:
UPDATE E SET 'Valor de Estoque' = E.Estoque * COALESCE(PCli.Preço, PMat.Preço) 
FROM Estoque E
LEFT JOIN
	(	SELECT TP.Cliente, TP.Material, Max(TP.Preço) Preco
		FROM TabelaPreço TP
		WHERE TP.Data =	(	SELECT MAX(TP2.Data))
							FROM TabelaPreço TP2
							WHERE TP2.Cliente = TP.Cliente AND TP2.Material = TP.Material
						)
		GROUP BY TP.Cliente, TP.Material
	) PCli ON PCli.Cliente = E.Cliente AND PCli.Material = E.Material
LEFT JOIN
	(	SELECT TP.Material, Max(TP.Preço) Preco
		FROM TabelaPreço TP
		WHERE TP.Data =	(	SELECT MAX(TP2.Data))
							FROM TabelaPreço TP2
							WHERE TP2.Material = TP.Material
						)
		GROUP BY TP.Material
	) PMat ON PMat.Material = E.Material
- será efetuado um agrupamento por cliente e material na tabela TabelaPreco, que trará o maior preço da data mais recente para o cliente e material. este conteúdo ficará numa tabela virtual chamada PCli.
- será efetuado um agrupamento por material na tabela TabelaPreco, que trará o maior preço da data mais recente para o material. este conteúdo ficará numa tabela virtual chamada PMat
- será efetuado um relacionamento entre a tabela Estoque e PCli, observando cliente e material, de modo a obter o preço da data mais recente para o cliente e material
- será efetuado um relacionamento entre a tabela Estoque e PMat, observando o material, de modo a obter o preço da data mais recente para o material.
- será calculado o valor de estoque, utilizando a quantidade da tabela estoque, e o preço da tabela PCli ou PMat, obedecendo a seguinte sequencia (dentro da função COALESCE()):
- há preço na tabela PCli (preço mais recente de cliente e material), pega o preço de PCli;
- se não há preço em PCli, pega o preço de PMat (preço mais recente do material);
- se não há preço em PMat, retorna NULL;
qualquer valor multiplicado por NULL resultará em NULL, atendendo a condição do enunciado.
GOSTEI 1

Mais Respostas

André Carreiro

André Carreiro

05/09/2019

Obrigado pela resposta!
GOSTEI 0
POSTAR