Substituir 0 por 1 no select
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
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
Curtidas 0
Respostas
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.
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
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+
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
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
outra forma seria usando Stored Procs com tratamento de erros...
T+
|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
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
É 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
23/01/2004
faltou o END do CASE (antes do FROM)
T+
T+
GOSTEI 0
Lucianoko
23/01/2004
Valeu Colega, era isso mesmo.
t+
t+
GOSTEI 0