ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Comando SUM - Sql - Firebird 2.1.3 [Resolvido]

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
rique_neves
Mestre
Mestre


Registrado: Sexta-Feira, 17 de Fevereiro de 2012
Mensagens: 873

MensagemEnviada: Qui Set 11, 2014 10:35 am    Assunto: Comando SUM - Sql - Firebird 2.1.3 [Resolvido] Responder com Citação

Pessoal bom dia, não mando muito bem com sql's!
Tenho essa sintaxe, gostaria de Somar o Campo ValorParc ao realizar essa consulta. Podem de ajudar.

Código:
select CODIGO_CLIFOR,CODPARC, DATAVENCTO, DATAEMISSAO,DIAS, VALORPARC from movto where (codigo_clifor like :p1) and (datavencto <:p2) and situacao =:p3 order by datavencto



Fiz assim mas está me dando erro:

Código:
select movto.CODIGO_CLIFOR,movto.CODPARC, movto.DATAVENCTO, movto.DATAEMISSAO,movto .DIAS, sum(movto .VALORPARC) as ValorParcela from movto
where (movto .codigo_clifor like :p1) and (movto .datavencto <=:p2) and movto .situacao =:p3 group by movto .datavencto


Bye
_________________
Atrás de todo problema a uma oportunidade brilhantemente disfarçada!
Compartilhar Imagens .: http://s124.photobucket.com/


Editado pela última vez por rique_neves em Qui Set 11, 2014 2:32 pm, num total de 3 vezes
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Set 11, 2014 11:09 am    Assunto: Responder com Citação

Bom dia,

Experimente adicionar todos os campos retornados que não estão dentro de funções de agregação no Group By:

Código:
group by
    movto.CODIGO_CLIFOR,
    movto.CODPARC,
    movto.DATAVENCTO,
    movto.DATAEMISSAO,
    movto.DIAS


Espero que ajude.


Editado pela última vez por imex em Qua Mar 08, 2023 12:02 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
rique_neves
Mestre
Mestre


Registrado: Sexta-Feira, 17 de Fevereiro de 2012
Mensagens: 873

MensagemEnviada: Qui Set 11, 2014 11:56 am    Assunto: Responder com Citação

Imex, retornando o post.

O sql não retorna erro, mas não está somando.

Close;
Código:
SQL.clear;
             SQL.Add('select movto.CODIGO_CLIFOR,movto.CODPARC, movto.DATAVENCTO, movto.DATAEMISSAO,movto.DIAS,');
             SQL.Add('movto.valorparc,sum(movto.VALORPARC) as SomaParcela from movto where (movto.codigo_clifor like :p1)');
             SQL.Add('and (movto.datavencto <=:p2) and (movto.situacao =:p3) group by movto.datavencto,');
             SQL.Add('movto.CODIGO_CLIFOR,movto.CODPARC,movto.DATAEMISSAO,movto.DIAS,movto.valorparc');
             ParamByName('p1').AsInteger := dblCliente.KeyValue;
             ParamByName('p2').AsDateTime:= date;
             ParamByName('p3').AsString  := 'A';
             Open;

_________________
Atrás de todo problema a uma oportunidade brilhantemente disfarçada!
Compartilhar Imagens .: http://s124.photobucket.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Set 11, 2014 1:49 pm    Assunto: Responder com Citação

Com a sintaxe que foi utilizada, os registros serão agrupados (e no seu caso o valor será somado) se todos os campos que estão no Group By possuirem o mesmo valor.

Acho melhor você explicar o que pretende fazer com o resultado dessa query, caso não consiga obter o resultado desejado e precise de outras sugestões.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
rique_neves
Mestre
Mestre


Registrado: Sexta-Feira, 17 de Fevereiro de 2012
Mensagens: 873

MensagemEnviada: Qui Set 11, 2014 1:56 pm    Assunto: Responder com Citação

Certo. Preciso do seguinte.

Selecionar todos as parcelas que estão com data de vencimento em atraso - menor ou igual que a data correto, e com situacao = 'A'. Com o resultado dessa seleção quero que some quando deu.
Exemplo si encontrar 2 parcela aberta no valor de R$ 85,00, então o total será R$ 170,00.
Tenho que listar também as parcelas em aberto.

Neste select que montei está trazendo as informações menos a soma das parcelas.

Quanto ao valor da parcela são igual neste exemplo dado de R$ 85,00
_________________
Atrás de todo problema a uma oportunidade brilhantemente disfarçada!
Compartilhar Imagens .: http://s124.photobucket.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
rique_neves
Mestre
Mestre


Registrado: Sexta-Feira, 17 de Fevereiro de 2012
Mensagens: 873

MensagemEnviada: Qui Set 11, 2014 2:06 pm    Assunto: Responder com Citação

veja:


_________________
Atrás de todo problema a uma oportunidade brilhantemente disfarçada!
Compartilhar Imagens .: http://s124.photobucket.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Set 11, 2014 2:19 pm    Assunto: Responder com Citação

O valor da parcela pode ser diferente.
Os valores dos campos que estão no Group By é que tem que ser iguais para que os registros sejam agrupados.

Se você quer que esse total seja impresso, acho melhor você fazer a soma através da ferramenta utilizada para emitir o relatório.
Se você por acaso está utilizando um ClientDataSet, você pode criar um campo do tipo agregado para obter o total.
Outra alternativa seria utilizar 2 querys, sendo uma para obter os dados das parcelas em aberto e outra para obter somente o total (nesse caso será possível remover do Select e do Group By os campos que estão impedindo o agrupamento dos registros).

Espero que ajude.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Qui Set 11, 2014 2:26 pm    Assunto: Responder com Citação

Quando estou nesta situação, escolho entre duas 2 maneiras (não sei se são as mais corretas):

1ª - Após o Select percorro o resultado com While acumulando o valor da parcela numa variável e no final mostro essa totalização.

2ª - Com outra Query faço um segundo select simples somando a parcela.

Exemplo:

Código:

             SQL.clear;
             SQL.Add('select sum(VALORPARC) as SomaParcela from movto ');
             SQL.Add('where (codigo_clifor like :p1)');
             SQL.Add('and (datavencto <=:p2) and (situacao =:p3)');               
             ParamByName('p1').AsInteger := dblCliente.KeyValue;
             ParamByName('p2').AsDateTime:= date;
             ParamByName('p3').AsString  := 'A';
             Open;

_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
rique_neves
Mestre
Mestre


Registrado: Sexta-Feira, 17 de Fevereiro de 2012
Mensagens: 873

MensagemEnviada: Qui Set 11, 2014 2:31 pm    Assunto: Responder com Citação

Imex e Natanbh1.

Pensei também em usar uma QueryAux, só pra soma, e é isto que vou fazer.
Sinceramente não fico contente, 2 sql's para 1 resultado é injusto isso.

Obrigado a todos pela ajuda.

bye
_________________
Atrás de todo problema a uma oportunidade brilhantemente disfarçada!
Compartilhar Imagens .: http://s124.photobucket.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB