Fórum soma de uma subconsulta #301069

28/10/2005

0

Oi Uso Delphi 6 e Firebird 1,5 com componentes da paleta Interbase

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

Salupe

Responder

Posts

28/10/2005

Emerson Nascimento

tente assim:

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



Responder

Gostei + 0

28/10/2005

Salupe

Faltou alguma coisa antes do primeiro from da tua rotina???

ele está dando erro no from


Responder

Gostei + 0

28/10/2005

Salupe

Desculpe foi erro meu

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


Responder

Gostei + 0

28/10/2005

Emerson Nascimento

:wink:

para melhorar a performance da consulta, crie índices para os campos utilizados nos relacionamentos. para chaves compostas, inicie pelos campos de maior abrangência.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar