Totalizar no período

Delphi

01/10/2012

Pessoal, na semana passada consegui resolver o problema aqui no forum com a ajuda da galera, só que mais para frete surgiu outra dúvida e novamente preciso da ajuda de vocês para sanar mais um problema.

Seguinte faço uma pesquisa no banco de faturamento para retornar tudo que está em aberto de um determinado cliente em um determinado período e ao final de pesquisa eu quero o total geral desse período.
SQL_SomaDevedor.Close;
SQL_SomaDevedor.SQL.Clear;
SQL_SomaDevedor.SQL.Add('select FAT_IDCLIENTE, FAT_STATUS, FAT_VENCIMENTO, sum(FAT_VALORFATURA) as total_devedor from FINAN_FATURAMENTO');
SQL_SomaDevedor.SQL.Add('WHERE FAT_IDCLIENTE = '+QuotedStr(DBEdit1.Text)+' AND FAT_STATUS = '+QuotedStr(aberto)+' AND ');
SQL_SomaDevedor.SQL.Add('FAT_VENCIMENTO BETWEEN :data_ini AND :data_fim GROUP BY FAT_IDCLIENTE, FAT_STATUS, FAT_VENCIMENTO');

// criando o parametro em tempo de execusão -> TOTAL PAGO.
SQL_SomaDevedor.Params.ParamByName('data_ini').DataType := ftDate;
SQL_SomaDevedor.Params.ParamByName('data_fim').DataType := ftDate;

SQL_SomaDevedor.Params.ParamByName('data_ini').Value    := MaskEdit1.Text;
SQL_SomaDevedor.Params.ParamByName('data_fim').Value    := MaskEdit2.Text;

SQL_SomaDevedor.Open;

Edit_TotalPAgar.Text := SQL_SomaDevedor.FieldByName('total_devedor').AsString;


O valor retornado é o seguinte:
idcliente status data Valor
1 A 30/05/2008 700,00
1 A 30/10/2008 600,00


Eu quero que me retorne assim:
1 A 1300,00

O que devo modificar no código ?
Marcos Barbosa

Marcos Barbosa

Curtidas 0

Respostas

Ricardo Araujo

Ricardo Araujo

01/10/2012

SQL_SomaDevedor.Close;
SQL_SomaDevedor.SQL.Clear;
SQL_SomaDevedor.SQL.Add('select FAT_IDCLIENTE, FAT_STATUS, sum(FAT_VALORFATURA) as total_devedor from FINAN_FATURAMENTO');
SQL_SomaDevedor.SQL.Add('WHERE FAT_IDCLIENTE = '+QuotedStr(DBEdit1.Text)+' AND FAT_STATUS = '+QuotedStr(aberto)+' AND ');
SQL_SomaDevedor.SQL.Add('FAT_VENCIMENTO BETWEEN :data_ini AND :data_fim GROUP BY FAT_IDCLIENTE, FAT_STATUS');

// criando o parametro em tempo de execusão -> TOTAL PAGO.
SQL_SomaDevedor.Params.ParamByName('data_ini').DataType := ftDate;
SQL_SomaDevedor.Params.ParamByName('data_fim').DataType := ftDate;

SQL_SomaDevedor.Params.ParamByName('data_ini').Value := MaskEdit1.Text;
SQL_SomaDevedor.Params.ParamByName('data_fim').Value := MaskEdit2.Text;

Pode fazer desta forma que esta acima que dar certo.


Eu tenho um exemplo simples que e esta funcionando, em meu projeto segue codigo abaixo.


select it.cd_empresa, 'S' as status, sum(it.preco) Valor
from notas_fiscais_saida_itens it left join notas_fiscais_saida s
on (s.cd_nota_fiscal = it.cd_nota_fiscal)
where CONVERT(date, s.data_emissao, 103) between
CONVERT(date, '29/09/2012', 103) and
CONVERT(date, '01/10/2012', 103) and
it.cd_empresa = '3'
group by it.cd_empresa



cd_empresa Status Valor
3 S 67263,845237




GOSTEI 0
Marcos Barbosa

Marcos Barbosa

01/10/2012

Desculpa ñ ter respondido o post, tive um problema e fiquei ausente, estou olhando sua resposta agora, vou testar e posto o resultado depois.
obrigado
GOSTEI 0
Marcos Barbosa

Marcos Barbosa

01/10/2012

rbbarreto, funcionou, só precisou eu retirar do select e do group by a data de vencimento.
Novamente muito obrigado e desculpa pela demora em responder.
GOSTEI 0
Deivison Melo

Deivison Melo

01/10/2012

Podemos encerrar o tópico?
GOSTEI 0
Marcos Barbosa

Marcos Barbosa

01/10/2012

topico encerrado.
novamente, muito obrigado.
GOSTEI 0
POSTAR