Fórum REPLICANDO DADOS #597765
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
Curtir tópico
+ 0Posts
11/10/2018
Alex Lekao
Eu de novo. rsrsr
Se vc colocar um group by não resolve seu problema?
Atenciosamente,
Gostei + 0
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. :/
Gostei + 0
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.
Gostei + 0
11/10/2018
Maicon Scapatici
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)