Inadimplêntes
Olá, tudo bem?
Estou com alguma dúvida a respeito de uma consulta.
Eu tenho duas tabelas:
DOADORES
id
nome
endereco
telefone
PAGAMENTOS
id
id_doadores
valor
data
Eu gostaria de saber como eu faço para poder listar os clientes q não fizeram pagamento em um determinado período pesquisado. Fiz este SQL abaixo:
Esta consulta está funcionando perfeitamente, só que ele mostra pra mim todos os clientes q fizeram o pagamento em um determinado período mas o que eu gostaria de ter é todos os clientes que NÃO fizeram o pagamento. Por favor me ajudem....
Aguardo respostas,
Baco
Estou com alguma dúvida a respeito de uma consulta.
Eu tenho duas tabelas:
DOADORES
id
nome
endereco
telefone
PAGAMENTOS
id
id_doadores
valor
data
Eu gostaria de saber como eu faço para poder listar os clientes q não fizeram pagamento em um determinado período pesquisado. Fiz este SQL abaixo:
procedure Tfrm_doacoesporperiodo.RzBitBtn1Click(Sender: TObject); Var Inicio, Final : String; Total : Double; begin If dataate.Date < datade.Date Then begin ShowMessage(´Intervalo de datas inválido, a data inicial é maior que a data final!´); dataate.Date := datade.Date; end Else begin Inicio := DateToStr(datade.Date); Final := DateToStr(dataate.Date); dm.Rel_Doacao.Close; dm.Rel_Doacao.SelectSQL.Clear; dm.Rel_Doacao.SelectSQL.Text := ´select A.*, B.NOME from PAGAMENTO A, DOADORES B where PAGAMENTO.ID_DOADORES = DOADORES.ID and DATA>= :pInicial and DATA<= :pFinal´; dm.Rel_Doacao.ParamByName(´pInicial´).AsDateTime := StrToDate(Inicio); dm.Rel_Doacao.ParamByName(´pFinal´).AsDateTime := StrToDate(Final); dm.Rel_Doacao.Prepare; dm.Rel_Doacao.Open; QuickRep1.Preview; end; end;
Esta consulta está funcionando perfeitamente, só que ele mostra pra mim todos os clientes q fizeram o pagamento em um determinado período mas o que eu gostaria de ter é todos os clientes que NÃO fizeram o pagamento. Por favor me ajudem....
Aguardo respostas,
Baco
Prof. Baco
Curtidas 0
Respostas
Motta
22/06/2005
Qual bd ?
A tabela de pagamento só é gravada no ato do pagamento, não ?
Em Oracle 9 (suporta subqueries)
ALGUNS BD NAO ACEITAM ESTA SINTAXE
OU
ESTA É ANSI, CREIO.
A tabela de pagamento só é gravada no ato do pagamento, não ?
Em Oracle 9 (suporta subqueries)
SELECT * FROM DOADORES D WHERE NOT EXISTS (SELECT NULL FROM PAGAMANTOS P WHERE P.ID_DOADORES = D.ID)
ALGUNS BD NAO ACEITAM ESTA SINTAXE
OU
SELECT ID FROM DOADORES MINUS SELECT ID_DOADORES FROM PAGAMENTO
ESTA É ANSI, CREIO.
GOSTEI 0
Prof. Baco
22/06/2005
Olá Motta,
Consegui resolver o problema. O meu banco é o Interbase o código correto está embaixo:
Espero q venha ajudar outra pessoa...
Um Abraço....
Prof. Baco[/code]
Consegui resolver o problema. O meu banco é o Interbase o código correto está embaixo:
procedure Tfrm_inadimplentes.RzBitBtn1Click(Sender: TObject); Var Inicio, Final, ordem : String; begin if RadioGroup1.ItemIndex = 0 then ordem := ´NOME´ else ordem := ´N_CARNE´; If dataate.Date < datade.Date Then begin ShowMessage(´Intervalo de datas inválido, a data inicial é maior que a data final!´); dataate.Date := datade.Date; end Else begin Inicio := DateToStr(datade.Date); Final := DateToStr(dataate.Date); dm.Rel_Doadores.Close; dm.Rel_Doadores.SelectSQL.Clear; dm.Rel_Doadores.SelectSQL.Text := ´SELECT * FROM DOADORES D WHERE NOT EXISTS (SELECT NULL FROM PAGAMENTO P WHERE P.ID_DOADORES = D.ID and P.DATA>= :pInicial and P.DATA<= :pFinal) order by ´+ordem; dm.Rel_Doadores.ParamByName(´pInicial´).AsDateTime := StrToDate(Inicio); dm.Rel_Doadores.ParamByName(´pFinal´).AsDateTime := StrToDate(Final); dm.Rel_Doadores.Prepare; dm.Rel_Doadores.Open; rel_filtro.Preview; end; end;
Espero q venha ajudar outra pessoa...
Um Abraço....
Prof. Baco[/code]
GOSTEI 0