Fórum Ajuda com verificação #597383
25/09/2018
0
segue o código:
SELECT
ITE.CODVEND,
ITE.APELIDO,
GERENTE,
:PERIODO.INI AS "DTINICIAL",
:PERIODO.FIN AS "DTFINAL",
TO_DATE(:PERIODO.FIN,'DD/MM/YYYY') - TO_DATE (:PERIODO.INI,'DD/MM/YYYY') + 1 AS "QTD_DIAS",
AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN) AS "QTD_DIAS_UTEIS",
SUM(ITE.QTDNEG) AS "QTDNEG_TOT",
SUM(ITE.PESO_TOT) AS "PESO_TOT",
SUM(ITE.VLRTOT_LIQ) / SUM(ITE.QTDNEG) AS "VLRUNIT",
SUM(ITE.VLRTOT_LIQ) AS "VLRTOT",
SUM(ITE.VLRDESC) AS "VLRDESC",
SUM(ITE.VLRTOT_LIQ) AS "VLRTOT_LIQ",
SUM(ITE.CUSTO_TOTAL) AS "CUSTO_TOTAL",
(SUM(ITE.VLRTOT_LIQ) -SUM(ITE.CUSTO_TOTAL)) AS "VLR_MARGEM",
((SUM(ITE.VLRTOT_LIQ) / DECODE(SUM(ITE.CUSTO_TOTAL),0,1,SUM(ITE.CUSTO_TOTAL)))-1)*100 AS "PERC_MARKUP",
(SELECT COUNT(*) FROM TGFPRO
WHERE CODGRUPOPROD IN :P_CODGRUPOPROD
AND MARCA IN :P_MARCA
) AS "QTD_MIX_TOT",
(SELECT COUNT(DISTINCT CODPROD) FROM AD_CAMPANHAS_ITE
WHERE CODGRUPOPROD IN :P_CODGRUPOPROD
AND MARCA IN :P_MARCA
AND DTFATUR >= :PERIODO.INI
AND DTFATUR <= :PERIODO.FIN
AND CODVEND = ITE.CODVEND) AS "QTD_MIX_VDA",
(SELECT COUNT(DISTINCT CODPROD) FROM AD_CAMPANHAS_ITE
WHERE CODGRUPOPROD IN :P_CODGRUPOPROD
AND MARCA IN :P_MARCA
AND DTFATUR >= :PERIODO.INI
AND DTFATUR <= :PERIODO.FIN
AND CODVEND = ITE.CODVEND) /DECODE((SELECT COUNT(*) FROM TGFPRO
WHERE CODGRUPOPROD IN :P_CODGRUPOPROD
AND MARCA IN :P_MARCA),0,1,(SELECT COUNT(*) FROM TGFPRO
WHERE CODGRUPOPROD IN :P_CODGRUPOPROD
AND MARCA IN :P_MARCA))*100 AS "PERC_MIX",
(SELECT COUNT(*) FROM TGFRPV RPV
WHERE RPV.CODVEND = ITE.CODVEND
AND NOT EXISTS (SELECT 1 FROM TGFPAR PAR
WHERE PAR.CODPARC = RPV.CODPARC
AND PAR.ATIVO = 'S'
AND PAR.CODVEND = RPV.CODVEND))+
(SELECT COUNT(*) FROM TGFPAR PAR
WHERE PAR.CODVEND = ITE.CODVEND
AND PAR.ATIVO = 'S'
AND NOT EXISTS (SELECT 1 FROM TGFRPV RPV
WHERE RPV.CODPARC = PAR.CODPARC
AND RPV.CODVEND = PAR.CODVEND)) AS "QTD_PARC_TOT",
(SELECT COUNT(DISTINCT ITE2.CODPARC) FROM AD_CAMPANHAS_ITE ITE2
WHERE ITE2.CODGRUPOPROD IN :P_CODGRUPOPROD
AND ITE2.MARCA IN :P_MARCA
AND ITE2.DTFATUR >= :PERIODO.INI
AND ITE2.DTFATUR <= :PERIODO.FIN
AND ITE2.CODVEND = ITE.CODVEND) AS "QTD_PARC_VDA",
(SUM(ITE.VLRTOT_LIQ) /(SELECT COUNT(DISTINCT ITE2.CODPARC) FROM AD_CAMPANHAS_ITE ITE2
WHERE ITE2.CODGRUPOPROD IN :P_CODGRUPOPROD
AND ITE2.MARCA IN :P_MARCA
AND TO_DATE(ITE2.DTFATUR,'DD/MM/YY') >= :PERIODO.INI
AND TO_DATE(ITE2.DTFATUR,'DD/MM/YY') <= :PERIODO.FIN
AND ITE2.CODVEND = ITE.CODVEND)) AS "TICKETCLI",
(SELECT COUNT(DISTINCT ITE2.CODPARC) FROM AD_CAMPANHAS_ITE ITE2
WHERE ITE2.CODGRUPOPROD IN :P_CODGRUPOPROD
AND ITE2.MARCA IN :P_MARCA
AND ITE2.DTFATUR >= :PERIODO.INI
AND ITE2.DTFATUR <= :PERIODO.FIN
AND ITE2.CODVEND = ITE.CODVEND) AS "QTD_PARC_VDA",
(SELECT COUNT(DISTINCT ITE2.CODPARC) FROM AD_CAMPANHAS_ITE ITE2
WHERE ITE2.CODGRUPOPROD IN :P_CODGRUPOPROD
AND ITE2.MARCA IN :P_MARCA
AND ITE2.DTFATUR >= :PERIODO.INI
AND ITE2.DTFATUR <= :PERIODO.FIN
AND ITE2.CODVEND = ITE.CODVEND) / ((SELECT COUNT(*) FROM TGFRPV RPV
WHERE RPV.CODVEND = ITE.CODVEND
AND NOT EXISTS (SELECT 1 FROM TGFPAR PAR
WHERE PAR.CODPARC = RPV.CODPARC
AND PAR.ATIVO = 'S'
AND PAR.CODVEND = RPV.CODVEND))+
(SELECT COUNT(*) FROM TGFPAR PAR
WHERE PAR.CODVEND = ITE.CODVEND
AND PAR.ATIVO = 'S'
AND NOT EXISTS (SELECT 1 FROM TGFRPV RPV
WHERE RPV.CODPARC = PAR.CODPARC
AND RPV.CODVEND = PAR.CODVEND)))*100 AS "PERC_PARC",
SUM(ITE.QTDNEG) / DECODE(AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN),0,1,AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN)) AS "QTDNEG_DIA",
SUM(ITE.PESO_TOT) / DECODE(AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN),0,1,AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN)) AS "PESO_DIA",
SUM(ITE.VLRTOT_LIQ) / DECODE(AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN),0,1,AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN)) AS "VALOR_DIA",
(SUM(ITE.QTDNEG) / DECODE(AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN),0,1,AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN))) * AD_DIAS_UTEIS(SYSDATE-30,SYSDATE) AS "QTDNEG_30",
(SUM(ITE.PESO_TOT) / DECODE(AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN),0,1,AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN))) * AD_DIAS_UTEIS(SYSDATE-30,SYSDATE) AS "PESO_30",
(SUM(ITE.VLRTOT_LIQ) / DECODE(AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN),0,1,AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN))) * AD_DIAS_UTEIS(SYSDATE-30,SYSDATE) AS "VALOR_30",
sankhya.AD_FC_CONFIGCAMP (STP_GET_CODUSULOGADO,
:PERIODO.INI ,
:PERIODO.FIN,
(SELECT (listagg(CODGRUPOPROD,',') within group (order by CODGRUPOPROD))
FROM TGFGRU
WHERE CODGRUPOPROD IN :P_CODGRUPOPROD),
(SELECT (listagg(DESCRICAO,',') within group (order by DESCRICAO))
FROM TGFMAR
WHERE DESCRICAO IN :P_MARCA),
(SELECT (listagg(CODVEND,',') within group (order by CODVEND))
FROM TGFVEN
WHERE CODVEND IN :P_CODVEND)) AS "VALIDACAO",
(SELECT COUNT(DISTINCT NUNOTA)
FROM AD_CAMPANHAS_ITE ITE2
WHERE 0 = 0
AND ITE2.DTFATUR >= :PERIODO.INI
AND ITE2.DTFATUR <= :PERIODO.FIN
AND ITE2.CODGRUPOPROD IN :P_CODGRUPOPROD
AND ITE2.MARCA IN :P_MARCA
AND ITE2.CODVEND = ITE.CODVEND
AND NUNOTA >= 0) "QTDVENDAS",
SUM(ITE.VLRTOT_LIQ) / (SELECT COUNT(DISTINCT NUNOTA)
FROM AD_CAMPANHAS_ITE ITE2
WHERE 0 = 0
AND TO_DATE(ITE2.DTFATUR,'DD/MM/YY') >= :PERIODO.INI
AND TO_DATE(ITE2.DTFATUR,'DD/MM/YY') <= :PERIODO.FIN
AND ITE2.CODGRUPOPROD IN :P_CODGRUPOPROD
AND ITE2.MARCA IN :P_MARCA
AND ITE2.CODVEND = ITE.CODVEND
AND NUNOTA >=0) AS "TICKETMEDIO",
(SELECT COUNT(DISTINCT NUNOTA)
FROM AD_CAMPANHAS_ITE ITE2
WHERE 0 = 0
AND TO_DATE(ITE2.DTFATUR,'DD/MM/YY') >= :PERIODO.INI
AND TO_DATE(ITE2.DTFATUR,'DD/MM/YY') <= :PERIODO.FIN
AND ITE2.CODGRUPOPROD IN :P_CODGRUPOPROD
AND ITE2.MARCA IN :P_MARCA
AND ITE2.CODVEND = ITE.CODVEND
AND NUNOTA>=0) AS "QTD_PEDIDOS"
FROM AD_CAMPANHAS_ITE ITE
WHERE 0 = 0
AND TO_DATE(ITE.DTFATUR,'DD/MM/YY') >= :PERIODO.INI
AND TO_DATE(ITE.DTFATUR,'DD/MM/YY') <= :PERIODO.FIN
AND TO_CHAR(DTFATUR,'DD/MM/YYYY HH24:MI') >= TO_CHAR(:DTINI,'DD/MM/YYYY HH24:MI')
AND TO_CHAR(DTFATUR,'DD/MM/YYYY HH24:MI') <= TO_CHAR(:DTFIN,'DD/MM/YYYY HH24:MI')
AND ITE.CODGRUPOPROD IN :P_CODGRUPOPROD
AND ITE.CODVEND IN :P_CODVEND
AND ITE.MARCA IN :P_MARCA
AND ITE.CODPROD IN NVL(:P_CODPROD,ITE.CODPROD)
AND ITE.CODTIPPARC IN NVL(:P_CODTIPPARC,ITE.CODTIPPARC)
AND NUNOTA >= 0
GROUP BY
ITE.CODVEND,
ITE.APELIDO,
GERENTE
ORDER BY ITE.APELIDO
Maicon Scapatici
Curtir tópico
+ 0Post mais votado
25/09/2018
Você já identificou onde esta o erro, correto?
Você poderia colocar a parte do código onde encontrou o erro?
Cara, confesso que tentei ler seu código, mas mais me confundiu que tudo. rsrsr
Tem algumas tratativas que podem ser feitas para uma divisão por zero, mas acho que seria mais interessante analisarmos o ponto do código onde esta acontecendo o problema.
Atenciosamente,
Alex Lekao
Gostei + 1
Mais Posts
26/09/2018
Maicon Scapatici
Eis a tabela que estou olhando agora, aonde provavelmente está o erro.
SELECT ITE.CODVEND, ITE.CODPROD, ITE.DESCRPROD, ITE.CODGRUPOPROD, ITE.DESCRGRUPOPROD, ITE.MARCA, SUM(ITE.QTDNEG) AS "QTDNEG_TOT", SUM(ITE.PESO_TOT) AS "PESO_TOT", SUM(ITE.VLRTOT_LIQ) / DECODE(SUM(ITE.QTDNEG),0,1,SUM(ITE.QTDNEG)) AS "VLRUNIT", SUM(ITE.VLRTOT_LIQ) AS "VLRTOT", SUM(ITE.VLRDESC) AS "VLRDESC", SUM(ITE.CUSTO_TOTAL) AS "CUSTO_TOTAL", SUM(ITE.CUSTO_TOTAL) / DECODE(SUM(ITE.QTDNEG),0,1,SUM(ITE.QTDNEG)) AS "CUSTO_UNIT", ((SUM(ITE.VLRTOT_LIQ) / DECODE(SUM(ITE.CUSTO_TOTAL),0,1,SUM(ITE.CUSTO_TOTAL)))-1)*100 AS "PERC_MARKUP", (SUM(ITE.VLRTOT_LIQ) -SUM(ITE.CUSTO_TOTAL)) AS "VLR_MARGEM", (SELECT COUNT(DISTINCT ITE2.CODPARC) FROM AD_CAMPANHAS_ITE ITE2 WHERE ITE2.CODGRUPOPROD IN :P_CODGRUPOPROD AND ITE2.MARCA IN :P_MARCA AND ITE2.CODPROD = ITE.CODPROD AND ITE2.DTFATUR >= :PERIODO.INI AND ITE2.DTFATUR <= :PERIODO.FIN AND ITE2.CODVEND = ITE.CODVEND) AS "QTD_PARC_VDA", (SELECT COUNT(DISTINCT ITE2.CODPARC) FROM AD_CAMPANHAS_ITE ITE2 WHERE ITE2.CODGRUPOPROD IN :P_CODGRUPOPROD AND ITE2.MARCA IN :P_MARCA AND ITE2.CODPROD = ITE.CODPROD AND ITE2.DTFATUR >= :PERIODO.INI AND ITE2.DTFATUR <= :PERIODO.FIN AND ITE2.CODVEND = ITE.CODVEND) / ((SELECT COUNT(*) FROM TGFRPV RPV WHERE RPV.CODVEND = ITE.CODVEND AND NOT EXISTS (SELECT 1 FROM TGFPAR PAR WHERE PAR.CODPARC = RPV.CODPARC AND PAR.CODVEND = RPV.CODVEND))+ (SELECT COUNT(*) FROM TGFPAR PAR WHERE PAR.CODVEND = ITE.CODVEND AND NOT EXISTS (SELECT 1 FROM TGFRPV RPV WHERE RPV.CODPARC = PAR.CODPARC AND RPV.CODVEND = PAR.CODVEND)))*100 AS "PERC_PARC", SUM(ITE.QTDNEG) / DECODE(AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN),0,1,AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN)) AS "QTDNEG_DIA", SUM(ITE.PESO_TOT) / DECODE(AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN),0,1,AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN)) AS "PESO_DIA", SUM(ITE.VLRTOT_LIQ) / DECODE(AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN),0,1,AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN)) AS "VALOR_DIA", (SUM(ITE.QTDNEG) / DECODE(AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN),0,1,AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN))) * AD_DIAS_UTEIS(SYSDATE-30,SYSDATE) AS "QTDNEG_30", (SUM(ITE.PESO_TOT) / DECODE(AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN),0,1,AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN))) * AD_DIAS_UTEIS(SYSDATE-30,SYSDATE) AS "PESO_30", (SUM(ITE.VLRTOT_LIQ) / DECODE(AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN),0,1,AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN))) * AD_DIAS_UTEIS(SYSDATE-30,SYSDATE) AS "VALOR_30" FROM AD_CAMPANHAS_ITE ITE WHERE 0 = 0 AND TO_DATE(ITE.DTFATUR,'DD/MM/YY') >= :PERIODO.INI AND TO_DATE(ITE.DTFATUR,'DD/MM/YY') <= :PERIODO.FIN AND TO_CHAR(DTFATUR,'DD/MM/YYYY HH24:MI') >= TO_CHAR(:DTINI,'DD/MM/YYYY HH24:MI') AND TO_CHAR(DTFATUR,'DD/MM/YYYY HH24:MI') <= TO_CHAR(:DTFIN,'DD/MM/YYYY HH24:MI') AND ITE.CODVEND IN :P_CODVEND AND ITE.CODPROD IN NVL(:P_CODPROD,ITE.CODPROD) AND ITE.CODGRUPOPROD IN :P_CODGRUPOPROD AND ITE.MARCA IN :P_MARCA AND ITE.CODVEND IN :ARG_CODVEND AND ITE.CODTIPPARC IN NVL(:P_CODTIPPARC,ITE.CODTIPPARC) GROUP BY ITE.CODVEND, ITE.CODPROD, ITE.DESCRPROD, ITE.CODGRUPOPROD, ITE.DESCRGRUPOPROD, ITE.MARCA ORDER BY ITE.CODPROD
Gostei + 0
26/09/2018
Maicon Scapatici
Gostei + 0
26/09/2018
Alex Lekao
Entendi.
Mas imagino que essa questão precisa ser tratada no código, porque isso vai acontecer novamente.
Sugiro nas operações onde tem divisão, você adicionar uma tratativa para divisão por zero.
Com isso você já resolve quando houver esse problema novamente.
Se não me engano com a função NULLIF você consegue tratar essa questão, você o coloca no divisor.
Atenciosamente,
Gostei + 1
26/09/2018
Maicon Scapatici
Obrigado pela sugestão! Quando eu tiver feito e testado coloco a implementação aqui para você dar uma olhada.
Gostei + 0
26/09/2018
Alex Lekao
Será interessante para conhecimento de alguém que estiver passando pelo mesmo problema.
Uma coisa que me equivoquei, NULLIF é SLQ Server, para Oracle deve ter algo similar, eu não conheço, me confundi com o banco que você estava no tópico.
Gostei + 1
Clique aqui para fazer login e interagir na Comunidade :)