Array
(
)

achar total da nota na consulta

Victor Pavia
   - 21 fev 2013

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

Alex Lekao
   - 21 fev 2013

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

Victor Pavia
   - 21 fev 2013

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.

Victor Pavia
   - 21 fev 2013

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.

Victor Pavia
   - 21 fev 2013

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.

Alex Lekao
   - 22 fev 2013

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

Alex Lekao
   - 22 fev 2013

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