Ajuda em SQL com 3 Tabelas
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;
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
Curtidas 0
Respostas
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
CASE WHEN ME.OPERACAO = ´+´´´E´´´+´ THEN 1 [b:ecf0ccd274] ELSE -1 [/b:ecf0ccd274]END
GOSTEI 0
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