Fórum Auxilio para encontrar erro no código onde uso LEFT JOIN para filtrar os dados desejados #540478
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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)