Substituir 0 por 1 no select

Firebird

23/01/2004

Teria como substituir uma valor ou string por outra?
O problema é quando o estoque é 0, aí acontece o erro na 4ª linha.
Uso D7, IBX e FB1.5

select G.CODIGO, G.DESCRICAO, G.UNIDADE,
sum(I.CUSTO * I.ESTOQUE) as TOTAL,
sum(I.ESTOQUE) as ESTOQUE,
(sum(I.CUSTO * I.ESTOQUE) / sum(I.ESTOQUE)) as CUSTO
from GRUPOMATERIA G
join MATERIA M on G.codigo = M.codgrupomat
join MATERIAITENS I on M.codigo


Lucianoko

Lucianoko

Curtidas 0

Respostas

Aroldo Zanela

Aroldo Zanela

23/01/2004

Colega,

Coloca o script completo pra gente avaliar melhor. Não conheço o FB com profundidade, mas vejo uma solução usando WHERE ou HAVING.


GOSTEI 0
Lucianoko

Lucianoko

23/01/2004

Acho que não expliquei direito, então vamos lá.

select codigo, nome, (salario / dias) from cliente

Quando dias for 0 (zero) gostaria que fosse substituido por 1 para não dar erro de divisão por zero.

O código acima é apenas um exemplo, o verdadeiro é o primeiro do tópico.

Se os dias fosse Null, eu poderia usar coalesce, mas não é o que preciso.

Se puderem me ajudar, blz.

t+


GOSTEI 0
Afarias

Afarias

23/01/2004

select codigo, nome, (salario / dias) from cliente

|Quando dias for 0 (zero) gostaria que fosse substituido por 1 para não
|dar erro de divisão por zero.

mas o resultado para mim tb não parece lógico


|Se os dias fosse Null, eu poderia usar coalesce, mas não é o que
|preciso.

use um CASE -- já q vc está com FB 1.5, tipo

  select codigo, nome, 
           case  
              when (dias = 0) then 0 
              else (salario / dias)
           end
  from cliente


outra forma seria usando Stored Procs com tratamento de erros...

T+


GOSTEI 0
Lucianoko

Lucianoko

23/01/2004

Blz.
É isso que eu queria, só que deu erro no select abaixo.
Sem o Case dá erro de divisão por zero, com o Case dá o seguinte erro:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 8, char 1.
from.

select G.CODIGO, G.DESCRICAO, G.UNIDADE,
sum(I.CUSTO * I.ESTOQUE) as TOTAL,
sum(I.ESTOQUE) as ESTOQUE,
[b:9f97def6bf]CASE WHEN (sum(I.ESTOQUE) = 0) THEN
(sum(I.CUSTO * I.ESTOQUE) / sum(I.ESTOQUE))
ELSE
(sum(I.CUSTO * I.ESTOQUE))[/b:9f97def6bf]
from GRUPOMATERIA G
join MATERIA M on G.codigo = M.codgrupomat
join MATERIAITENS I on M.codigo = I.codmat
group by G.CODIGO, G.DESCRICAO, G.UNIDADE


GOSTEI 0
Afarias

Afarias

23/01/2004

faltou o END do CASE (antes do FROM)


T+


GOSTEI 0
Lucianoko

Lucianoko

23/01/2004

Valeu Colega, era isso mesmo.

t+


GOSTEI 0
POSTAR