achar total da nota na consulta

21/02/2013

1

Pessoal,

Preciso achar o total dos produtos nessa consulta (coluna vtotalproduto). Nesse caso, essa coluna calcula o total por produto. Preciso dar um sum() e achar o total da nota. Como fazer isso?


select distinct codfilial,NUMEROMOV,idmov,nseqitmmov,dataemissao,DATALANCAMENTO,CODTMV,CODIGOREDUZIDO,
DESCRICAO,NUMEROCCF,
SITTRIBUTARIAPIS,SITTRIBUTARIACOFINS,vtotalvendaitem as vtotalproduto
,basePIS,baseCofins,
CODNAT

from (

select distinct tm.codfilial,tm.NUMEROMOV,tm.IDMOV,ttm.nseqitmmov,tm.dataemissao,tm.DATALANCAMENTO,tm.CODTMV,tp.CODIGOREDUZIDO,
tp.DESCRICAO,tp.NUMEROCCF

,(ttm.QUANTIDADE * ttm.PRECOUNITARIO)
- case when ttm.VALORDESC is null then 0 else ttm.VALORDESC end
+ case when ttm.VALORdesp is null then 0 else ttm.VALORDESP end
as vtotalvendaitem


,tm.VALORDESP


,(select BASEDECALCULO from TTRBMOV where IDMOV = ttm.IDMOV and NSEQITMMOV =
ttm.NSEQITMMOV and CODTRB = ''pis'') as basePIS

,(select SITTRIBUTARIA from TTRBMOV where IDMOV = ttm.IDMOV and NSEQITMMOV =
ttm.NSEQITMMOV and CODTRB = ''pis'') as sittributariaPIS

,(select valor from TTRBMOV where IDMOV = ttm.IDMOV and NSEQITMMOV =
ttm.NSEQITMMOV and CODTRB = ''pis'') as valorPis

,(select BASEDECALCULO from TTRBMOV where IDMOV = ttm.IDMOV and NSEQITMMOV =
ttm.NSEQITMMOV and CODTRB = ''cofins'') as baseCofins

,(select SITTRIBUTARIA from TTRBMOV where IDMOV = ttm.IDMOV and NSEQITMMOV =
ttm.NSEQITMMOV and CODTRB = ''cofins'') as sittributariaCOFINS

,(select VALOR from TTRBMOV where IDMOV = ttm.IDMOV and NSEQITMMOV =
ttm.NSEQITMMOV and CODTRB = ''cofins'') as valorCofins

,d.CODNAT,d.DESCRICAOCOMPLETA

from TMOV tm

inner join TITMMOV ttm on (ttm.IDMOV = tm.IDMOV)
inner join TPRD tp on (tp.IDPRD = ttm.IDPRD)
inner join TPRDFISCAL tpf on (tpf.IDPRD = tp.idprd)
inner join DNATUREZA d on (d.IDNAT = ttm.IDNAT)
left join TTRBMOV ttb on (ttb.IDMOV = ttm.IDMOV and ttb.NSEQITMMOV = ttm.NSEQITMMOV)
where
tm.DATALANCAMENTO >= ''01/01/2013''
and tm.datalancamento <= ''31/01/2013''
and tm.STATUS <> ''C'' and (d.CODnat like ''5%'' or d.codnat like ''6%'')
and tm.NUMEROMOV = ''000023915''
)T1
Responder

Posts

21/02/2013

Alex Lekao

Ola Vitor, boa tarde!!!

Como vc já tem bastante subselects de repende acrescente mais um para fazer isso.

Coloque no subselect o campo do sum que vc quer, para a tabela onde os campos estão, no where vc usa um campo que seja único e igual para estas tabelas, ou mais de um se for o caso, exemplo: where t1.numpedido = t2.numpedido and t1.codcliente = t2.codcliente, coisas deste tipo, e não esquecer de usar o group by, assim acho que vc já encontrara o valor total da nota e não ficara muito complicado de fazer.

Confesso que não analisei a fundo o seu código.

a proposito no post anterior conseguiu o que queria?

Espero ter ajudado.

Abraco.

Alex - Lekao
Responder

21/02/2013

Victor Pavia

fiz isso criei uma subquery, mas deu pau dizendo que achou mais de um valor.

,(select sum((ttm1.QUANTIDADE * ttm1.PRECOUNITARIO)
- case when ttm1.VALORDESC is null then 0 else ttm1.VALORDESC end
+ case when ttm1.VALORdesp is null then 0 else ttm1.VALORDESP end)
from titmmov ttm1 where ttm1.idmov = tm.idmov group by quantidade,precounitario,valordesc,valordesp,idmov)
as vtotalnota


Outra coisa a performance dessa consulta esta bem pesada.
Responder

21/02/2013

Victor Pavia

fiz isso criei uma subquery, mas deu pau dizendo que achou mais de um valor.

,(select sum((ttm1.QUANTIDADE * ttm1.PRECOUNITARIO)
- case when ttm1.VALORDESC is null then 0 else ttm1.VALORDESC end
+ case when ttm1.VALORdesp is null then 0 else ttm1.VALORDESP end)
from titmmov ttm1 where ttm1.idmov = tm.idmov group by quantidade,precounitario,valordesc,valordesp,idmov)
as vtotalnota


Outra coisa a performance dessa consulta esta bem pesada.
Responder

21/02/2013

Victor Pavia

resolvi gerando uma tabela temporária só com os totais e ligando nessa consulta pelo numero da nota(campo numeromov).
O único problema é a performance, ficou pesada.
Responder

22/02/2013

Alex Lekao

Oi Vitor, boa tarde!!!

Você deve ter esquecido de usar o Group By...

Da uma conferida se não faltou, vc vai precisar usar nada a não ser o sum e o agrupamento pelo campo da nota que fara o link com a outra tabela tbm usando o mesmo campo.

Abraco.

Alex - Lekao
Responder

22/02/2013

Alex Lekao

Opa... dei uma olhada melhor no código que postou...

acho que o problema esta no group by mesmo, vc usou campos para o agrupamento que fizeram com que gerassem mais de um registro.

Caso vc queira vc pode usar o top 1 e o order by desc ou asc depois do group by para que seja usado apenas a informação correta.

Abraco.

Alex - Lekao
Responder