Jump to content

dev botao

  • Este tópico foi criado há 2848 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Posted

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 

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

Posted

Paulo consegui resolver é bem simples, mas nao vi em lugar nenhum explicando que o cast ou o sum tem que ficar fora do case

CAST(sum(
             case
                when m.vltotalbruto = 0 then 0
                when m.vltotalbruto < 0 then 0
             else
                ((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))
             end) AS NUMERIC(11,2)) as vltotal,

pronto resolvido

  • Este tópico foi criado há 2848 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.