Fórum soma de uma subconsulta #301069
28/10/2005
0
Existe alguma forma de pegar um soma de uma subconsulta.
Utilizo a seguinte consulta, para buscar as vendas que não estejam indicadas na tabela indicanota e mostrar uma unica venda por cliente, para simplesmente mostrar os clientes que estão devendo.
Select Distinct CadCli_Forn.CodCli_Forn,
CadCli_Forn.NomeFantasia, CadCli_Forn.Ativo,
CadCli_Forn.Tipo, CadCli_Forn.RazaoSocial,
CadCli_Forn.CodCidade, CadCli_Forn.CodGrupo,
CadCli_Forn.CodSubGrupo
from CadCli_Forn, MovProdutos, CadTipoDocumentos,
UsoGruFinan where ((CadCli_Forn.CodGrupo = UsoGruFinan.CodGrupo
and CadCli_Forn.CodSubGrupo = UsoGruFinan.CodSubGrupo
and UsoGruFinan.CodTipoMovFinanceiro = ´´´+IntToStr(TipoFinan)+´´´
and UsoGruFinan.Uso = ´´´+´S´+´´´)
or (CadCli_Forn.CodGrupo = UsoGruFinan.CodGrupo
and UsoGruFinan.CodSubGrupo = ´´´+´0´+´´´
and UsoGruFinan.CodTipoMovFinanceiro = ´´´+IntToStr(TipoFinan)+´´´
and UsoGruFinan.Uso = ´´´+´S´+´´´))
and (CadCli_Forn.CodCli_Forn = MovProdutos.CodCliente
or CadCli_Forn.CodCli_Forn = MovProdutos.CodImposto
or CadCli_Forn.CodCli_Forn = MovProdutos.CodDespesa) ´)
and MovProdutos.ValorTotal > MovProdutos.ValorPago
and (MovProdutos.CodTipoDocumento < ´´´+´1000´+´´´
and CadTipoDocumentos.AtualFinanceiro = ´´´+´N´+´´´
and CadTipoDocumentos.AtualContabilidade = ´´´+´S´+´´´
and not(MovProdutos.CodMovProdutos in
(Select IndicaNota.CodMovNota from IndicaNota,
MovProdutos where IndicaNota.CodMovPaga = MovProdutos.CodMovProdutos
and IndicaNota.CodFilial = MovProdutos.CodFilial
and MovProdutos.ValorTotal > MovProdutos.ValorPago)))
A Sql funciona do jeito que eu queria, só que eu preciso fazer uma totalização desses valores, ou seja, mostrar o total que cada cliente está devendo,
Existe como fazer com que a subconsulta me traga uma soma disso e eu consiga mostrar no grid esse valor, atualmente eu tenho que refazer a consulta dentro do calc fields e isso deixa a consulta muito lenta.
Agradeço antecipadamente qualquer ajuda.
Salupe
Curtir tópico
+ 0Posts
28/10/2005
Emerson Nascimento
Select CadCli_Forn.CodCli_Forn, CadCli_Forn.NomeFantasia, CadCli_Forn.Ativo, CadCli_Forn.Tipo, CadCli_Forn.RazaoSocial, CadCli_Forn.CodCidade, CadCli_Forn.CodGrupo, CadCli_Forn.CodSubGrupo, Sum(MovProdutos.ValorTotal) ValorTotal, Sum(MovProdutos.ValorPago) ValorPago from CadCli_Forn inner join MovProdutos on (MovProdutos.CodCliente = CadCli_Forn.CodCli_Forn or MovProdutos.CodImposto = CadCli_Forn.CodCli_Forn or MovProdutos.CodDespesa = CadCli_Forn.CodCli_Forn) inner join CadTipoDocumentos on (CadTipoDocumentos.CodTipoDocumento = MovProdutos.CodTipoDocumento) inner join UsoGruFinan on (UsoGruFinan.CodGrupo = CadCli_Forn.CodGrupo and UsoGruFinan.Uso = ´´S´´ and (UsoGruFinan.CodSubGrupo = CadCli_Forn.CodSubGrupo or UsoGruFinan.CodSubGrupo = ´´0´´)) where (UsoGruFinan.CodTipoMovFinanceiro = ´´´+IntToStr(TipoFinan)+´´´) and (MovProdutos.ValorTotal > MovProdutos.ValorPago) and (MovProdutos.CodTipoDocumento < ´´1000´´) and not (MovProdutos.CodMovProdutos in (Select IndicaNota.CodMovNota from IndicaNota, MovProdutos where IndicaNota.CodMovPaga = MovProdutos.CodMovProdutos and IndicaNota.CodFilial = MovProdutos.CodFilial and MovProdutos.ValorTotal > MovProdutos.ValorPago)) group by CadCli_Forn.CodCli_Forn, CadCli_Forn.NomeFantasia, CadCli_Forn.Ativo, CadCli_Forn.Tipo, CadCli_Forn.RazaoSocial, CadCli_Forn.CodCidade, CadCli_Forn.CodGrupo, CadCli_Forn.CodSubGrupo
Gostei + 0
28/10/2005
Salupe
ele está dando erro no from
Gostei + 0
28/10/2005
Salupe
Melhorou e muito caiu o tempo da consulta de 1 minuto para 11 segundos, mas acho que mais rápido que isso vai ser impossível.
Obrigado pela ajuda
Gostei + 0
28/10/2005
Emerson Nascimento
para melhorar a performance da consulta, crie índices para os campos utilizados nos relacionamentos. para chaves compostas, inicie pelos campos de maior abrangência.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)