Auxilio para encontrar erro no código onde uso LEFT JOIN para filtrar os dados desejados
21/12/2015
0
Boa tarde pessoal.
Sou novo no fórum e preciso de ajuda de vocês pois não entendo muito de Query Sql.
Fiz uma pesquisa no fórum sobre LEFT JOIN ao qual me ajudou bastante para o uso do mesmo, porém ainda não estou conseguindo efetuar o filtro desejado.
Estou colando o código que estou usando. Sua finalidade é trazer tudo que tenho da tabela temporária PROD_FOR e os relacionados da tabela temporária MOVIMENT, porém isto não está acontecendo ele está trazendo apenas os dados da tabela temporária MOVIMENT.
O Banco de Dados utilizado é o DB2.
Desde já agradeço a atenção de todos.
Abraço
Sou novo no fórum e preciso de ajuda de vocês pois não entendo muito de Query Sql.
Fiz uma pesquisa no fórum sobre LEFT JOIN ao qual me ajudou bastante para o uso do mesmo, porém ainda não estou conseguindo efetuar o filtro desejado.
Estou colando o código que estou usando. Sua finalidade é trazer tudo que tenho da tabela temporária PROD_FOR e os relacionados da tabela temporária MOVIMENT, porém isto não está acontecendo ele está trazendo apenas os dados da tabela temporária MOVIMENT.
O Banco de Dados utilizado é o DB2.
Desde já agradeço a atenção de todos.
Abraço
WITH MOVIMENT(IDEMPRESA, IDEMPRESABAIXAEST, IDLOCALESTOQUE, IDPRODUTO, IDSUBPRODUTO, IDOPERACAO, DESCROPERACAO, FLAGMOVSALDOPRO, QTDENTRADAS, QTDSAIDAS, QTDBALANCO )AS ( SELECT E_A.IDEMPRESA, E_A.IDEMPRESABAIXAEST, E_A.IDLOCALESTOQUE, E_A.IDPRODUTO, E_A.IDSUBPRODUTO, E_A.IDOPERACAO, O_I.DESCROPERACAO, E_A.FLAGMOVSALDOPRO, CASE WHEN E_A.IDOPERACAO < 1000 THEN SUM(E_A.QTDPRODUTO) ELSE 0 END AS QTDENTRADAS, CASE WHEN E_A.IDOPERACAO > 1000 AND E_A.IDOPERACAO <> 2000 THEN SUM(E_A.QTDPRODUTO) ELSE 0 END AS QTDSAIDAS, CASE WHEN E_A.IDOPERACAO = 2000 THEN SUM(E_A.QTDPRODUTO) ELSE 0 END AS QTDBALANCO FROM ESTOQUE_ANALITICO AS E_A, OPERACAO_INTERNA AS O_I, PRODUTO_FORNECEDOR AS P_F WHERE E_A.FLAGMOVSALDOPRO = 'T' AND E_A.IDOPERACAO = O_I.IDOPERACAO AND E_A.IDPRODUTO = P_F.IDPRODUTO AND E_A.IDSUBPRODUTO = P_F.IDSUBPRODUTO AND E_A.IDEMPRESA IN(:RA_IDEMPRESA) AND P_F.IDCLIFOR IN(:RA_IDCLIFOR) AND E_A.DTMOVIMENTO BETWEEN :RA_DTINI AND :RA_DTFIM GROUP BY E_A.IDEMPRESA, E_A.IDEMPRESABAIXAEST, E_A.IDLOCALESTOQUE, E_A.IDPRODUTO, E_A.IDSUBPRODUTO, E_A.IDOPERACAO, O_I.DESCROPERACAO, E_A.FLAGMOVSALDOPRO ORDER BY E_A.IDPRODUTO, E_A.IDLOCALESTOQUE, E_A.IDOPERACAO ), PROD_FOR(IDCLIFOR, NOME, IDPRODUTO, IDSUBPRODUTO, DESCRRESPRODUTO ) AS ( SELECT C_F.IDCLIFOR, C_F.NOME, P_G.IDPRODUTO, P_G.IDSUBPRODUTO, P_G.DESCRRESPRODUTO FROM PRODUTO_GRADE AS P_G, CLIENTE_FORNECEDOR AS C_F, PRODUTO_FORNECEDOR AS P_F WHERE P_G.IDPRODUTO = P_F.IDPRODUTO AND P_G.IDSUBPRODUTO = P_F.IDSUBPRODUTO AND P_F.IDCLIFOR = C_F.IDCLIFOR AND P_F.IDCLIFOR IN ( :RA_IDCLIFOR ) AND P_G.FLAGINATIVO IN ( :RA_FLAGINTIVO ) ) SELECT P_F.IDPRODUTO, P_F.DESCRRESPRODUTO, COALESCE(MOV.QTDENTRADAS,0) AS QTDENTRADAS, COALESCE(MOV.QTDSAIDAS,0) AS QTDSAIDAS, COALESCE(MOV.QTDBALANCO,0) AS QTDBALANCO FROM PROD_FOR AS P_F LEFT JOIN MOVIMENT AS MOV ON ( P_F.IDPRODUTO = MOV.IDPRODUTO AND P_F.IDSUBPRODUTO = MOV.IDSUBPRODUTO )
Anderson
Curtir tópico
+ 0
Responder
Posts
21/12/2015
Anderson
Boa tarde pessoal.
Gostaria de pedir desculpas, pois o código está correto apenas não estava ordenado, por isso não estava conseguindo localizar o resultado.
Apenas coloquei um ORDER BY por código e está tudo resolvido.
Grande Abraço.
Gostaria de pedir desculpas, pois o código está correto apenas não estava ordenado, por isso não estava conseguindo localizar o resultado.
Apenas coloquei um ORDER BY por código e está tudo resolvido.
Grande Abraço.
Responder
Clique aqui para fazer login e interagir na Comunidade :)