Ir para conteúdo

Arquivado

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

fabio.silva

[Resolvido] Fazer calculos com possiveis zeros!

Recommended Posts

Mais uma vez preciso de ajuda! Daqui a pouco vou ter que pagar consultoria para o MOTTA!!

EU preciso fazer uns calculos que podem ter zero no meio. quando tiver zero eu deveria apenas desconsiderar o valor, porem como tem % se entrar um zero ele obviamente zera tudo.

(e.vlrvenda * (i.percentual / 100) * icm.marglucro / 100)
        * icm.aliqsubtrib
        / 100 AS st,

Estava procurando uma soluçao simples, tipo o case when mas nao sei como por um select dentro do case nem sei se dá.

eu imagino que de pra resolver usando apenas matematica e logica mas ja rabisquei um pack de folhas e ainda nao tive nenhum progresso..

 

Obrigado pessoas!!

Compartilhar este post


Link para o post
Compartilhar em outros sites
... eu deveria apenas desconsiderar o valor, ...

 

coloque no where

 

select ...
from ...
where ...
and e.vlrvenda <> 0 
and i.percentual <> 0
and icm.marglucro <> 0 
and icm.aliqsubtrib <> 0 

Compartilhar este post


Link para o post
Compartilhar em outros sites

coloque no where

 

select ...
from ...
where ...
and e.vlrvenda <> 0 
and i.percentual <> 0
and icm.marglucro <> 0 
and icm.aliqsubtrib <> 0 

 

Motta, na verdade nao da pra ser assim.. pois acontece por exemplo: um produto custa 10 reais, tem 5% de ipi e 12% de icms = R$21,7.

outro produto q custa R$10 nao tem ipi ou seja a alicota de ipi é 0% e o icm é 12% = R$11,2

So que quando o acontece de o produto nao ter alguma alicota zera a conta toda pois multiplicaçao por zero é zero!

 

Mais um desafio para aprender!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na realidade não seria ?

 

um produto custa 10 reais, tem 5% de ipi e 12% de icms = R$21,7.

10 * 1,05 = 11,05 * 1,12 = 12,37

 

outro produto q custa R$10 nao tem ipi ... e o icm é 12% = R$11,2

 

10 * 1,00 = 10 * 1,12 = 11,20

 

ou seja multiplicar por 1 quando não tiver alicota

 

formula básica

1 + (valor/100)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na realidade não seria ?

 

 

10 * 1,05 = 11,05 * 1,12 = 12,37

 

 

 

10 * 1,00 = 10 * 1,12 = 11,20

 

ou seja multiplicar por 1 quando não tiver alicota

 

formula básica

1 + (valor/100)

 

Isso mesmo Motta, zapeando por ai achei a funçao decode. o codigo ficou feio mas aparentemente funciona. mas seguindo a sua linha também daria se eu mudasse um pouquinho a query, pois no meu calculo eu esto obtendo o valor referente a porcentagem e nao valor total.

Ficou assim:

(e.vlrvenda * decode(nvl(i.percentual, 0), 0, 1, (i.percentual / 100)) * icm.marglucro / 100)* icm.aliqsubtrib / 100 AS st

 

mais uma funçao do oracle aprendida!! e caso alguem como eu caia nesse topico segue a explicaçao obtida em outro site por tora34:

 

a função decode é bastante simples.

Basicamente, quando o valor da coluna i.percentual é igual a 0 substitua por 1 senão substitua por i.percentual/100.

 

Expressão:

(e.vlrvenda * decode(nvl(i.percentual, 0), 0, 1, (i.percentual / 100)) * icm.marglucro / 100)* icm.aliqsubtrib / 100 AS st
Quando i.percentual = 0
(e.vlrvenda * 1 * icm.marglucro / 100)* icm.aliqsubtrib / 100 AS st
Quando i.percentual != 0
(e.vlrvenda * (i.percentual / 100) * icm.marglucro / 100)* icm.aliqsubtrib / 100 AS st 

 

para mais informações acesse http://www.dba-oracle.com/t_decode_function.htm

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.