Jump to content
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?

Share this post


Link to post
Share on other 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)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.