[firebase-br] Left Join com 3 Tabelas - Retorno Incorreto de Valores

Valdir valdirdill em infolivre.com.br
Qua Fev 4 09:04:26 -03 2009


Olá, preciso de ajuda sobre o que poderia estar errado na SQL abaixo.

A tabela MOVI_TERMIN_PRODS (MET) só tem um único lançamento e o campo 
PRODUTO desse lançamento está igual a 2 e o campo VALOR_UM está igual a 
3,00.
Já a tabela MOVIESTOQUE (ME) tem dois lançamentos com campo PRODUTO igual a 
2 e, no campo VALOR_TRES desses lançamentos tem 4,00 e 8,00.
O campo SOMA_VALOR_TRES está retornando corretamente 12,00. Porém, o valor 
de SOMA_VALOR_UM está retornando incorretamente 6,00, quando o correto seria 
3,00.
Pelo que percebi, o valor 3,00 está sendo somando 2 vezes, ou seja, soma 
tantas vezes quantos forem os lançamentos existentese na linha 
"SUM(ME.VALOR_TRES*(CASE WHEN ME.PRODUTO = 2 THEN 1 ELSE 0 END)) AS 
SOMA_VALOR_TRES", mas essa linha é relativa a tabela MOVIESTOQUE (ME), 
enquanto que deveria somar somente os valores existente na tabela 
MOVI_TERMIN_PRODS (MET) que tem apenas um lançamento com valor 3,00 no campo 
VALOR_UM.

Por gentileza, se puder, analise a consulta e me retorne.

 CDSTeste.Close;
 SQLDSTeste.Close;
 SQLDSTeste.CommandText := 'SELECT  P.CODIGO,
  SUM(MET.VALOR_UM*(CASE WHEN TESTE.PRODUTO = 2 THEN 1 ELSE 0 END)) AS 
SOMA_VALOR_UM,
  SUM(MET.VALOR_DOIS*(CASE WHEN TESTE.PRODUTO = 2 THEN 1 ELSE 0 END)) AS 
SOMA_VALOR_DOIS,

  SUM(ME.VALOR_TRES*(CASE WHEN ME.PRODUTO = 2 THEN 1 ELSE 0 END)) AS 
SOMA_VALOR_TRES,
  SUM(ME.VALOR_QUATRO*(CASE WHEN ME.PRODUTO = 2 THEN 1 ELSE 0 END)) AS 
SOMA_VALOR_QUATRO

  FROM PRODUTOS P LEFT JOIN MOVI_TERMIN_PRODS TESTE ON (TESTE.PRODUTO = 
P.CODIGO)
  LEFT JOIN MOVIESTOQUE ME ON (ME.PRODUTO = P.CODIGO) GROUP BY P.CODIGO ';
CDSTeste.Open;


Obrigado.
Valdir Dill 







Mais detalhes sobre a lista de discussão lista