Ajuda - Busca - Membros - Calendário
Versão Completa: (Resolvido) Instrução SQL para buscar dados e fazer um
Fórum Script Brasil > Programação & Desenvolvimento > Delphi, Kylix
robinhocne
Estou precisando buscar os dados dos alunos pela determinada data.


CODE
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

CODE
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 ?
Denis Courcy
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:
CODE
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
robinhocne
QUOTE(Denis Courcy @ 08/04/2008 - 12:34) *
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:
CODE
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....???
Denis Courcy
Oi, 'robinhocne' !
QUOTE

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.
CODE
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

QUOTE

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.
robinhocne
QUOTE(Denis Courcy @ 10/04/2008 - 10:35) *
Oi, 'robinhocne' !
QUOTE

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.
CODE
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

QUOTE

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:

CODE
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;
Esta é uma versão simplificada de nosso conteúdo principal. Para ver a versão completa com maiores informações, formatação e imagens, por favor clique aqui.
Invision Power Board © 2001-2012 Invision Power Services, Inc.