 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
pancotte Novato

Registrado: Segunda-Feira, 5 de Outubro de 2009 Mensagens: 14
|
Enviada: Qui Ago 03, 2017 12:25 pm Assunto: Arithimetic Overflow divisao por zero e case |
|
|
Pessoal,
Tenho este sql abaixo, onde o campo VLTOTALBRUTO esta dando erro de arithimetic por estar zerado em alguns casos.
Tentei usar um case para tratar quando for zero nao executar a sentensa do cast, porem ele nao passa pelo case. Ele deveria jogar para a variavel vltotal = 0 qdo o vltotalbruto for 0, caso contrario executar executar o cast, mas mesmo usando o case ele da erro de arithimetic
| Código: | SELECT p.cnpj_cpf, SUBSTRING(p.insc_rg FROM 1 FOR 14), p.tpinsc, m.dataemissao,
nf.uf, cast(lpad (m.numdocumento, 6, '0') as varchar(06)),
mi.percicms as aliquota,
Case When m.vltotalbruto = 0 then 0
else
CAST((sum((mi.qtde * mi.vlunitario) + coalesce(mi.vlipi, 0) +
((mi.qtde * mi.vlunitario)*(((coalesce(nf.vloutrasdespesas,0) * 100) / m.vltotalbruto) / 100)) +
((mi.qtde * mi.vlunitario)*(((coalesce(nf.vlseguro,0) * 100) / m.vltotalbruto) / 100)) +
((mi.qtde * mi.vlunitario)*(((coalesce(m.vlfrete,0) * 100) / m.vltotalbruto) / 100)) +
coalesce(mi.valoricmsst, 0) - coalesce(mi.vldesconto, 0))) AS NUMERIC(11,2)) end as vltotal,
CAST((sum((coalesce(mi.baseicms, 0)))) AS NUMERIC(11,2)) as baseicms,
CAST((sum(mi.vlicms)) AS NUMERIC(11,2)) as vlicms,
m.situacao, SUBSTRING(nf.modelo from 1 for 2), mi.cfop
FROM mov_movimento m
JOIN mov_nf nf on (m.cod= nf.cod)
JOIN pes_pessoas p on (m.codclifor = p.cod)
join g_tpmovimento tp on (m.codtpmovimento = tp.cod)
join mov_movitens mi on (m.cod = mi.codmovimento)
WHERE m.dataemissao >= :INICIO AND m.dataemissao <= :fim and m.codempresa = :codempresa
GROUP BY p.cnpj_cpf, p.insc_rg, p.tpinsc, m.dataemissao, nf.uf, m.numdocumento,
mi.percicms, m.situacao, nf.modelo,mi.cfop, m.vltotalbruto |
|
|
| Voltar ao Topo |
|
 |
joemil Moderador

Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9100 Localização: Sinop-MT
|
Enviada: Sex Ago 04, 2017 9:44 am Assunto: |
|
|
ja tentou usar IF no lugar do CASE?
| Código: | SELECT p.cnpj_cpf, SUBSTRING(p.insc_rg FROM 1 FOR 14), p.tpinsc, m.dataemissao,
nf.uf, cast(lpad (m.numdocumento, 6, '0') as varchar(06)),
mi.percicms as aliquota,
IF(m.vltotalbruto = 0, 0,
CAST((sum((mi.qtde * mi.vlunitario) + coalesce(mi.vlipi, 0) +
((mi.qtde * mi.vlunitario)*(((coalesce(nf.vloutrasdespesas,0) * 100) / m.vltotalbruto) / 100)) +
((mi.qtde * mi.vlunitario)*(((coalesce(nf.vlseguro,0) * 100) / m.vltotalbruto) / 100)) +
((mi.qtde * mi.vlunitario)*(((coalesce(m.vlfrete,0) * 100) / m.vltotalbruto) / 100)) +
coalesce(mi.valoricmsst, 0) - coalesce(mi.vldesconto, 0))) AS NUMERIC(11,2))) AS vltotal,
CAST((sum((coalesce(mi.baseicms, 0)))) AS NUMERIC(11,2)) as baseicms,
CAST((sum(mi.vlicms)) AS NUMERIC(11,2)) as vlicms,
m.situacao, SUBSTRING(nf.modelo from 1 for 2), mi.cfop
FROM mov_movimento m
JOIN mov_nf nf on (m.cod= nf.cod)
JOIN pes_pessoas p on (m.codclifor = p.cod)
join g_tpmovimento tp on (m.codtpmovimento = tp.cod)
join mov_movitens mi on (m.cod = mi.codmovimento)
WHERE m.dataemissao >= :INICIO AND m.dataemissao <= :fim and m.codempresa = :codempresa
GROUP BY p.cnpj_cpf, p.insc_rg, p.tpinsc, m.dataemissao, nf.uf, m.numdocumento,
mi.percicms, m.situacao, nf.modelo,mi.cfop, m.vltotalbruto |
_________________ <b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/ |
|
| Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|