Pergunta de exercício de SQL
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
(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
Curtidas 0
Melhor post
Emerson Nascimento
06/09/2019
acredito que essa instrução deva fazer o que você precisa:
- 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.
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 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
05/09/2019
Obrigado pela resposta!
GOSTEI 0