Auxilio para encontrar erro no código onde uso LEFT JOIN para filtrar os dados desejados

21/12/2015

0

SQL

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

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

Anderson

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.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar