Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ISREL LOUIS RAMOS

Calcular % em querys

Recommended Posts

Boa tarde, criei a seguinte query:

select b.data,

       a.desc_grupo AS GRUPO,
       a.desc_variavel AS INDICADOR,
       b.vl_dia AS DIA_PREV,
       nvl(c.vl_dia, 0) + nvl(d.vl_dia, 0) AS DIA_REALIZ,
       b.vl_mes AS MES_PREV,
       nvl(c.vl_mes, 0) + nvl(d.vl_mes, 0) AS MES_REALIZ,
       b.vl_ANO AS ACUM_PREV,
       nvl(c.vl_ANO, 0) + nvl(d.vl_ANO, 0) AS ACUM_REALIZ
  from PIMSPRD.tbita_bi_indicadores a
 inner join pimsprd.tbita_bi_indicPREV b on b.indicador = a.indicador
  left join pimsprd.tbita_bi_indicREALIZ c on c.data = b.data
                                          and c.indicador = a.indicador
  left join pimsprd.tbita_bi_indicREALIZ_MANUAL d on d.data = b.data
                                                 and d.indicador =
                                                     a.indicador
 WHERE B.DATA = TO_DATE(SYSDATE - 1, 'DD/MM/YYYY')
 order by C.DATA, A.GRUPO, A.ORDEM_SEQ
Ai surgiu a necessidade de efetuar o calculo da variação entre o DIA_PREV e DIA_REALIZ, adicionei o seguinte campo ( esta comentado):
       b.vl_dia AS DIA_PREV,
       nvl(c.vl_dia, 0) + nvl(d.vl_dia, 0) AS DIA_REALIZ,
   --  ((nvl(c.vl_dia, 0) + nvl(d.vl_dia, 0)/ b.vl_dia)*100),
Porém acontece que alguns indicadores previstos são com o valor 0 e alguns realizados são 0 também, ou seja, fazendo esse comando direto aparece a mensagem: divisor is equal to zero, alguém sabe alguma operação ou maneira diferente que eu possa estar fazendo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

faço assim

(case when b.vl_dia <> 0
         then ((nvl(c.vl_dia, 0) + nvl(d.vl_dia, 0)/ b.vl_dia)*100)
         else null end)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.