achar total da nota na consulta
21/02/2013
0
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
Victor Pavia
Posts
21/02/2013
Alex Lekao
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
21/02/2013
Victor Pavia
,(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.
21/02/2013
Victor Pavia
,(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.
21/02/2013
Victor Pavia
O único problema é a performance, ficou pesada.
22/02/2013
Alex Lekao
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
22/02/2013
Alex Lekao
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
Clique aqui para fazer login e interagir na Comunidade :)