Ir para conteúdo

Arquivado

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

aureo2006

problema com a construção de SQL para um DataGrid

Recommended Posts

Eu tenho três tabelas que armazenam informações iguais de locais diferentes. Eu consigo juntar num unico relatório os dados das três tabelas da seguinte forma com a seguinte instrução SQL:SELECT ID_CONSUMO, DATA, COD_PRODUTO, DESCRICAO_PRODUT, QUANTIDADEFROM LOJA1UNION ALL SELECT ID_CONSUMO, DATA, COD_PRODUTO, DESCRICAO_PRODUT, QUANTIDADEFROM LOJA2UNION ALL SELECT ID_CONSUMO, DATA, COD_PRODUTO, DESCRICAO_PRODUT, QUANTIDADEFROM LOJA3;Ocorre que eu gostaria que o relatório pegasse, encima dessa consulta, e juntasse os produtos com o mesmo numerod e código, e somasse a quantidade consumida.Tipo: na tabela 1 determinado produto, cujo código é o numero 3, tem quatro registros de vendas: um registro com 3 peças, outro com 2, outros 2 com 1. Na tabela 2 e três situações semelhantes. Pois bem, eu gostaria que a partir da SQL o relatório me trouxesse os produtos agrupados com a soma dos numeros de consumo do campo quantidade. Assim: cod_produto 3, laranjas, 30 unidades, que seria a soma de tudo que foi consumido nas tres lojas: como eu faço a construção dessa SQL?Alguem sabe para poder me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta assim:

select ((select sum(loja3.quantidade) from loja3 where loja3.cod_produto = loja1.cod_produto) + (select sum(loja2.quantidade) from loja2 where loja2.cod_produto = loja1.cod_produto) + sum(loja1.quantidade)) as quantidade, cod_produto from loja1 group by cod_produto

Não sei se irá funcionar.Se funcionar só vai trazer o que você quer, se todos os produtos existirem na loja1.Para facilitar o que eu te indico é fazer uma tabela que contenha os registros desses produtos, e uma outra de vendas que contenha um campo que indique de qual loja é a venda. Isso iria facilitar ^^.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deucerto em parte...O problema que me surgiu foi o seguinte: Se existir o produto representado pelo numero no campo cod_produto tiver uma quantidade inserida nas três tabelas, a formula retorna o valor exato da quantidade. POrém, se existir em duas tabelas e não numa, me retorna um valor nulo, ficando vazio o resultado no datagrid que eu inseri os dados. O que pode ser feito para corrigir este problema?

Compartilhar este post


Link para o post
Compartilhar em outros sites

É como eu disse:

Se funcionar só vai trazer o que você quer, se todos os produtos existirem na loja1.

Eu consegui pensar em um jeito mas tem que ter uma tabela que tenha o cadastro de todos os produtos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Luiz...todos os produtos existem na loja1...Este não é o problema. O problema é o seguinte: os produtos da loja1, que são referencia para a soma, necessitam estar nas demais lojas também. Por exemplo, se um prodito, que existe na loja1, está também nas demais lojas, a soma ocorre. Ou seja, se houver um registro informando quantidade de venda na loja2 e na loja3 ocorre a soima. POrém, se estiver na loja2 e na loja 3 não houver nenhum registro de quantidade, ele não retorna nenhum valor, mesmo que na loja 2 tenha um registro informando a venda de 4 produtos identificados com o código do produto que existe na loja1. É como se ele não somasse valor nulo ou zero....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora entendi.Então em alguns BD existe a função NLV:

Funções NVL:Converte nulo para um valor real.Sintax: NVL(expr1,expr2)Expr1 -> é o valor de origem ou expressão que pode conter nulo.Expr2 -> é o valor de destino para a conversão de nulo.

Não sei se no SQL Server vai funcionar, mas se não, deve ter alguma função parecida:
select (NVL((select sum(loja3.quantidade) from loja3 where loja3.cod_produto = loja1.cod_produto),0) + NLV((select sum(loja2.quantidade) from loja2 where loja2.cod_produto = loja1.cod_produto),0) + NLV(sum(loja1.quantidade),0)) as quantidade, cod_produto from loja1 group by cod_produto

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.