REPLICANDO DADOS
11/10/2018
0
Na minha clausula where do select externo estou fazendo as comparações para me apresentar os dados, mas uma dessas comparações gera informações nulas, produtos que não tem devolução, não gera valor de devolução, então não me apresenta, mas preciso da venda desses produtos também. Tentei usar NVL para quando fosse nulo me apresentar 0, mas não obtive sucesso. Caso alguém consiga me ajudar... serei muito grato.
Segue código: *Obs.: se eu usar 'OR' ao invés de 'AND' no where do select externo ele traz todos os dados que eu preciso, o único problema é que ele replica tudo.
SELECT "VEND_COD_PRO", "VEND_DESC_PRO", "VEND_TOT_VENDA", "VEND_CODVOL", "DEV_TOT_DEVOLUCAO", "EST_ESTOQUE", "VEND_TOT_VENDA" - "DEV_TOT_DEVOLUCAO" AS "TOT_LIQ_VEND" FROM (SELECT ITE.CODPROD AS "VEND_COD_PRO", --CÓDIGO DO PRODUTO NA TELA DE ITENS PRO.DESCRPROD AS "VEND_DESC_PRO", -- DESCRIÇÃO DO PRODUTO NA TABELA DE PRODUTOS SUM(ITE.QTDNEG) AS "VEND_TOT_VENDA", -- SOMAR QUANTIDADE NEGOCIADA DA TABELA ITENS PRO.CODVOL AS "VEND_CODVOL" -- CÓDIGO DO VOLUME (UN DE MEDIDA) DA TABELA PRODUTO FROM TGFITE ITE, TGFPRO PRO, TGFCAB CAB -- ITE TABELA ITEM - PRO TABELA PRODUTO - CAB TABELA CABEÇALHO DE NOTA WHERE ITE.CODPROD = PRO.CODPROD AND ITE.NUNOTA = CAB.NUNOTA --NUNOTA - NÚMERO ÚNICO PARA SE IDENTIFICAR UMA NOTA AND PRO.MARCA IN ('MARCA1', 'MARCA2') -- MARCA DO PRODUTO NA TABELA PRODUTO AND CAB.TIPMOV = 'V' -- INDICAR QUE A MOVIMENTAÇÃO DESSES PRODUTOS DEVE SER DO TIPO "VENDA" AND CAB.CODTIPOPER IN (3221, 3216, 3220, 3201, 3218, 3202, 3200, 3214) --"CÓDIGO DE OPERAÇÃO DAS VENDAS QUE DEVEM APARECER" AND TO_DATE(CAB.DTFATUR, 'DD/MM/YY') >= 'DATAINICIAL' -- DEFINIR PERÍODO AND TO_DATE(CAB.DTFATUR, 'DD/MM/YY') <= 'DATAFINAL' GROUP BY ITE.CODPROD, PRO.DESCRPROD, PRO.CODVOL) "VENDA", (SELECT ITE2.CODPROD AS "DEV_COD_PRO", -- CÓDIGO DO PRODUTO NA TABELA ITEM SUM(ITE2.QTDNEG) AS "DEV_TOT_DEVOLUCAO" -- SOMA DA QUANTIDADE NEGOCIADA NA TABELA ITEM FROM TGFITE ITE2, TGFCAB CAB2, TGFPRO PRO2 -- ITE2 TABELA ITENS - CAB2 TABELA CABEÇALHO DE NOTA - PRO2 TABELA PRODUTOS WHERE ITE2.NUNOTA = CAB2.NUNOTA AND PRO2.CODPROD = ITE2.CODPROD AND PRO2.MARCA IN ('MARCA1', 'MARCA2') AND CAB2.TIPMOV = 'D' -- TIPO DO MOVIMENTO DEVOLUÇÃO DE VENDA AND TO_DATE(CAB2.DTFATUR, 'DD/MM/YY') >= 'DATAINICIAL' -- DEFINIR PERÍODO AND TO_DATE(CAB2.DTFATUR, 'DD/MM/YY') <= 'DATAFINAL' GROUP BY ITE2.CODPROD) "DEVOLUCAO", (SELECT PRO.CODPROD AS "EST_COD_PRO", --CÓDIGO DO PRODUTO NA TABELA PRODUTO SUM(EST.ESTOQUE) AS "EST_ESTOQUE" -- SOMA DO ESTOQUE DA TABELA ESTOQUE FROM TGFEST EST, TGFPRO PRO -- EST TABELA ESTOQUE - PRO TABELA PRODUTO WHERE PRO.CODPROD = EST.CODPROD AND PRO.MARCA IN ('MARCA1', 'MARCA2') GROUP BY PRO.CODPROD) "ESTOQUE" WHERE ESTOQUE."EST_COD_PRO" = DEVOLUCAO."DEV_COD_PRO" -- COMPARAÇÕES, SE EU UTILIZAR AND AQUI ELE ME APRESENTA SOMENTE OS QUE TEM DEVOLUÇÃO, UTILIZANDO OR ELE ME TRAZ TODOS OS DADOS QUE PRECISO, MAS TODOS REPLICANDO VARIAS VEZES. É AQUI O MEU PROBLEMA OR ESTOQUE."EST_COD_PRO" = VENDA."VEND_COD_PRO" ORDER BY "VEND_DESC_PRO"
Maicon Scapatici
Posts
11/10/2018
Alex Lekao
Eu de novo. rsrsr
Se vc colocar um group by não resolve seu problema?
Atenciosamente,
11/10/2018
Maicon Scapatici
Você se empenha bastante em ajudar! Por mais pessoas como você.
Então, mesmo colocando group by ele apresenta o mesmo resultado. :/
11/10/2018
Alex Lekao
Vc sabe se no Oracle tem algo similar ao outer apply??
Honestamente eu nao faco ideia.
Utilizo muito no SQL Server, me ajuda bastante em analises deste tipo.
11/10/2018
Maicon Scapatici
Clique aqui para fazer login e interagir na Comunidade :)