Fórum Substituir 0 por 1 no select #41719

23/01/2004

0

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

Responder

Posts

23/01/2004

Aroldo Zanela

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.


Responder

Gostei + 0

26/01/2004

Lucianoko

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+


Responder

Gostei + 0

26/01/2004

Afarias

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+


Responder

Gostei + 0

26/01/2004

Lucianoko

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


Responder

Gostei + 0

26/01/2004

Afarias

faltou o END do CASE (antes do FROM)


T+


Responder

Gostei + 0

27/01/2004

Lucianoko

Valeu Colega, era isso mesmo.

t+


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar