calculo com possivel zero

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
fabio_floripa
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Seg, 07 Jan 2013 10:18 am

Boa tarde a todos, primeiro post neste site que me parece ser o melhor e mais ativo sobre oracle!
gente estou com milhares de duvidas mas vou começar com esta que parece pegadinha.

eu tenho o seguinte calculo dentro de um select maior:
selec (e.vlrvenda * (i.percentual / 100) * icm.marglucro / 100)* icm.aliqsubtrib / 100 AS st,

acontece que de vez em quando pode haver um produto com algum percentual zerado, por exemplo:

(10 * (0 / 100) * 120 / 100)* 12 / 100 AS st,
o i.percentual é referente ao ipi e nem todos os produtos são tributados. quando isso acontece o meu calculo vai para zero, estragando toda a conta.
não sei como fazer o calculo da porcentagem de forma que isso não aconteça..

estou tentando aprender sobre sql dinamico mas até agora me parece que não é a sainda!!

Agradeço toda ajuda!
tora34
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 108
Registrado em: Qua, 12 Nov 2008 6:01 pm
Localização: Campo Mourão PR
Renato Pasquini
Oracle Developer

Boa tarde,
quando a coluna vl_percentual for nula (ou zero) não deve ser considerado o percentual no cálculo?
Se sim ficaria + ou - assim:
(e.vlrvenda * (decode(nvl(i.percentual, 0), 0, 1, i.percentual / 100)) * icm.marglucro / 100)* icm.aliqsubtrib / 100
fabio_floripa
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Seg, 07 Jan 2013 10:18 am

Caro Tora,

De fato agora retorna um valor e não mais o zero.. mas os valores não estao betendo com meus caulculo de ST.

você teria como explicar o que esta funçao decode está fazendo no codigo? em alguns casos parece que esta pegando o vlr_venda /100 e retornando.!

tipo vlr venda = 21.50
ST = 0,2150
tora34
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 108
Registrado em: Qua, 12 Nov 2008 6:01 pm
Localização: Campo Mourão PR
Renato Pasquini
Oracle Developer

boa tarde,
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
fabio_floripa
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Seg, 07 Jan 2013 10:18 am

Valeu tora!

com este funçao consigo obter os valores!!
não li as regras e não sei como positivar ou encerrar o topico. mas pra mim resolveu..
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Majestic-12 [Bot] e 15 visitantes