Ajuda em SQL com 3 Tabelas

Firebird

03/02/2009

Olá,
Por favor, analise a consulta abaixo.
o que pode estar errado na mesma? Todas os campos trazem os valores corretos, exceto pelos campos
ENTRADAS_TERMIN_POR_TERMINAC e SAIDAS_IN_NAT_POR_TERMINAC, que trazem valores relacionados a tabela MOVIESTOQUE, quando deveriam retornar valores relativos aos lançamentos da tabela MOVI_TERMIN_PRODS.

Obrigado.



CDSTeste.Close;
SQLDSTeste.Close;
SQLDSTeste.CommandText := ´SELECT P.CODIGO, P.DESCRICAO, P.ATUAL, P.UNIDADE, P.MARCA, P.ESTOQUEMINIMO,
P.QTDE_EM_CONSIG, P.QTDE_TERMINADO, P.REFERENCIA,

SUM(MET.QTDE_IN_NATURA*(CASE WHEN MET.QTDE_IN_NATURA > 1 THEN 1 END)) AS SAIDAS_IN_NAT_POR_TERMINAC,
SUM(MET.QTDE_TERMINADO*(CASE WHEN MET.QTDE_TERMINADO > 1 THEN 1 END)) AS ENTRADAS_TERMIN_POR_TERMINAC,

SUM(ME.QUANTIDADE*(CASE WHEN ME.OPERACAO = ´+´´´E´´´+´ THEN 1 END)) AS ENTRADAS_IN_NATURA,
SUM(ME.QUANTIDADE*(CASE WHEN ME.OPERACAO = ´+´´´S´´´+´ THEN 1 END)) AS SAIDAS_IN_NATURA,

SUM(ME.QTDE_TERMINADO*(CASE WHEN ME.OPERACAO = ´+´´´E´´´+´ THEN 1 END)) AS ENTRADAS_TERMINADO,
SUM(ME.QTDE_TERMINADO*(CASE WHEN ME.OPERACAO = ´+´´´S´´´+´ THEN 1 END)) AS SAIDAS_TERMINADO

FROM PRODUTOS P LEFT JOIN MOVI_TERMIN_PRODS MET ON (MET.PRODUTO = P.CODIGO AND MET.DATA >:VDataPosicao)
LEFT JOIN MOVIESTOQUE ME ON (ME.PRODUTO = P.CODIGO AND ME.DATA >:VDataPosicao)
GROUP BY P.CODIGO, P.DESCRICAO, P.ATUAL, P.UNIDADE, P.MARCA, P.ESTOQUEMINIMO,
P.QTDE_EM_CONSIG, P.QTDE_TERMINADO, P.REFERENCIA ORDER BY P.DESCRICAO ´;


SQLDSTeste.ParamByName(´VDATAPOSICAO´).AsDate := StrToDate(´10/10/2008´);
CDSTeste.Open;


Armindo

Armindo

Curtidas 0

Respostas

Powerlog Tecnologia

Powerlog Tecnologia

03/02/2009

Seu ´Case When´ está com problema... faltou o ELSE

CASE WHEN ME.OPERACAO = ´+´´´E´´´+´ THEN 1 [b:ecf0ccd274] ELSE -1 [/b:ecf0ccd274]END


GOSTEI 0
Armindo

Armindo

03/02/2009

Seu ´Case When´ está com problema... faltou o ELSE CASE WHEN ME.OPERACAO = ´+´´´E´´´+´ THEN 1 [b:513766ab8d] ELSE -1 [/b:513766ab8d]END


Colega, a linha SUM(ME.QUANTIDADE*(CASE WHEN ME.OPERACAO = ´+´´´E´´´+´ THEN 1 END)) AS ENTRADAS_IN_NATURA esá trazendo corretamente os valores.
Como mencionei, o problema é nas linhas SUM(MET.QTDE_IN_NATURA*(CASE WHEN MET.QTDE_IN_NATURA > 1 THEN 1 END)) AS SAIDAS_IN_NAT_POR_TERMINAC,
SUM(MET.QTDE_TERMINADO*(CASE WHEN MET.QTDE_TERMINADO > 1 THEN 1 END)) AS ENTRADAS_TERMIN_POR_TERMINAC que trazem os valores da tabela MOVIEESTOQUE (ME), quando o correto é pegar da MOVI_TERMIN_PRODS (MET), entendeu?

Obrigado.


GOSTEI 0
POSTAR