Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Instrução SQL para buscar dados e fazer um


robinhocne

Pergunta

Estou precisando buscar os dados dos alunos pela determinada data.

with dtmiza.qryiza do
         begin
            close;
            sql.Clear;
            sql.add (Select Codigo, Nome , DtCadastro, DtTeIni From Alunos where QuoteToStr (TxtDataInicial.Text);
            Sql.Add('where (DtTeIni >= :d1) ');
            ParambyName('d1').value  := FormatDateTime ('dd/mm/yyyy' , StrToDate (TxtDataInicial.Text));
            open;
         end;
Mas ai eu preciso mostrar no relatorio o valor total da cnh desse aluno(a) mas ai eu não sei como filtrar para que cada aluno que vai buscar mostrar o total da carteira dele
with QryTotal do
         begin
            close;
            sql.Clear;
            sql.add ('Select sum(Valor)as "SOMA" From Lancamento where tipo = 1 and Codigo' );
            open;
         end;

Então ai como eu filtrari isso ?

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Oi, 'robinhocne'!

Que atributo (campo) existe na tabela lancamentos que representa o aluno?

Uma vez determinado esta relação basta fazer a integração de um join com um group by

Exemplo. Supondo que o atributo "Codigo do aluno" neste caso chamado simplesmente de "código" esteja representado na tabela lançamentos. Então, o sql fiacria assim:

SELECT a.Codigo, a.Nome , a.DtCadastro, a.DtTeIni, sum(L.Valor)as "SOMA" 
FROM Alunos a
INNER JOIN Lancamento L
ON a.Codigo = L.Codigo
WHERE a.tTeIni >= :d1  and L.tipo = 1
GROUP BY a.Codigo

Adapte a suas necessidades.

Abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Oi, 'robinhocne'!

Que atributo (campo) existe na tabela lancamentos que representa o aluno?

Uma vez determinado esta relação basta fazer a integração de um join com um group by

Exemplo. Supondo que o atributo "Codigo do aluno" neste caso chamado simplesmente de "código" esteja representado na tabela lançamentos. Então, o sql fiacria assim:

SELECT a.Codigo, a.Nome , a.DtCadastro, a.DtTeIni, sum(L.Valor)as "SOMA" 
FROM Alunos a
INNER JOIN Lancamento L
ON a.Codigo = L.Codigo
WHERE a.tTeIni >= :d1  and L.tipo = 1
GROUP BY a.Codigo

Adapte a suas necessidades.

Abraço

Amigo Denis, está dando erro nop Sum, erro dynamic sql error, testei no ibexpert é dá a mesma coisa, e tbém tipo se o aluno tem 5 parcelas aparece 5 vezes o nome dele....???

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, 'robinhocne' !

Amigo Denis, está dando erro nop Sum, erro dynamic sql error, testei no ibexpert é dá a mesma coisa,

Cometi um erro ao escrever o select. Retire as aspas em soma.

SELECT a.Codigo, a.Nome , a.DtCadastro, a.DtTeIni, sum(L.Valor)as SOMA 
FROM Alunos a
INNER JOIN Lancamento L
ON a.Codigo = L.Codigo
WHERE a.tTeIni >= :d1  and L.tipo = 1
GROUP BY a.Codigo

e tbém tipo se o aluno tem 5 parcelas aparece 5 vezes o nome dele....???

Sim. Aparecerão todas as linhas da tabela que contenha o maior número de registros (no seu caso parcelas) duplicando os campos das tabelas que contenham menos informações (neste caso o cadastro)

O controle de exibição você deverá fazer via programação, para que fique no estilo master/detail.

Link para o comentário
Compartilhar em outros sites

  • 0
Oi, 'robinhocne' !

Amigo Denis, está dando erro nop Sum, erro dynamic sql error, testei no ibexpert é dá a mesma coisa,

Cometi um erro ao escrever o select. Retire as aspas em soma.

SELECT a.Codigo, a.Nome , a.DtCadastro, a.DtTeIni, sum(L.Valor)as SOMA 
FROM Alunos a
INNER JOIN Lancamento L
ON a.Codigo = L.Codigo
WHERE a.tTeIni >= :d1  and L.tipo = 1
GROUP BY a.Codigo
e tbém tipo se o aluno tem 5 parcelas aparece 5 vezes o nome dele....???
Sim. Aparecerão todas as linhas da tabela que contenha o maior número de registros (no seu caso parcelas) duplicando os campos das tabelas que contenham menos informações (neste caso o cadastro) O controle de exibição você deverá fazer via programação, para que fique no estilo master/detail.
Resolvido: Fiz da seguinte maneira:
With DtmIza.QryIza do
      Begin
         Close;
         Sql.Clear;
         Sql.Add ('Select A.Codigo, A.Nome, A.DtCadastro, A.DtTeIni, A.DtTeFin, A.Servicos, A.Categoria, sum(L.Valor) as SOMA ')
         Sql.Add ('FROM Alunos a INNER JOIN Lancamento L ON A.CODIGO= L.ALUNO ')
         Sql.Add ('WHERE A.Servicos = 1 and a.DtTeIni >= :d1')  
         Sql.Add ('group by A.Codigo, A.Nome, A.DtCadastro, A.DtTeIni, A.DtTeFin, A.Servicos, A.Categoria') 
         Sql.Add ('order by A.Codigo');
         ParambyName('d1').value  := FormatDateTime ('dd/mm/yyyy' , StrToDate (TxtData.Text));
         Open;
      end;

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...