Preciso de um SELECT que informe pagamento não efetuado

Delphi

28/11/2010

Estou com um problema que não consigo resolver! Preciso de um select que, analisando duas tabelas: uma de Contrato outra de pagamento, me dê a relação das pessoas que naquele mês não efetuaram o pagamento.   Na tabela pagamento existe uma coluna com a data de vencimento e na tabela contrato a data inicial do contrato. Gostaria que houvesse um relacionamento, considerando estas duas variáveis, para saber se houve o pagamento naquele mês.     TABELAS:   CONTRATO                                                   COD_CONTRATO,
CPF
ENDERECO
NUMERO
DATAINICIAL
DATAFINAL
VALORALUGUEL    PAGAMENTO   COD_PAGAMENTO
CPF
ENDERECO
NUMERO
MESREFERENCIA
DATAVENCIMENTO
DATAPAGAMENTO
VALORALUGUEL
VALORMULTA
VALORJUROS
VALORPAGAMENTO
Francisco Santos

Francisco Santos

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

28/11/2010

creio que seja isso (não testei... nem sei se a sintaxe está correta, pois fiz diretamente no bloco de notas)

SELECT C.*,
  (SELECT DATAPAGAMENTO FROM COD_PAGAMENTO CP
   WHERE CP.COD_CONTRATO = C.COD_CONTRATO
     AND EXTRACT(MONTH FROM DATAVENCIMENTO) = :MESREF
     AND EXTRACT(YEAR FROM DATAVENCIMENTO) = :ANOREF) PAGO
FROM CONTRATO C
WHERE EXTRACT(YEAR FROM C.DATAINICIAL)+(EXTRACT(MONTH FROM C.DATAINICAL)/100.00) <= (:ANOREF+(:MESREF/100))
  AND EXTRACT(YEAR FROM C.DATAFINAL)+(EXTRACT(MONTH FROM C.DATAFINAL)/100.00) >= (:ANOREF+(:MESREF/100))

essa instrução deve mostrar todos os contratos que contemplam o mês/ano indicado, e mostra a data do pagamento da parcela do referido mês - se ela tiver sido paga - na coluna PAGO. se não houve pagamento o valor deverá ser nulo.



para obter todos os que não efetuaram pagamento:

SELECT C.*,
FROM CONTRATO C
WHERE EXTRACT(YEAR FROM C.DATAINICIAL)+(EXTRACT(MONTH FROM C.DATAINICAL)/100.00) <= (:ANOREF+(:MESREF/100))
  AND EXTRACT(YEAR FROM C.DATAFINAL)+(EXTRACT(MONTH FROM C.DATAFINAL)/100.00) >= (:ANOREF+(:MESREF/100))
 AND NOT EXISTS(SELECT CP.DATAPAGAMENTO FROM COD_PAGAMENTO CP
   WHERE CP.COD_CONTRATO = C.COD_CONTRATO
     AND EXTRACT(MONTH FROM CP.DATAVENCIMENTO) = :MESREF
     AND EXTRACT(YEAR FROM CP.DATAVENCIMENTO) = :ANOREF
     AND NOT (CP.DATAPAGAMENTO IS NULL))

GOSTEI 0
Francisco Santos

Francisco Santos

28/11/2010

Obrigado Emerson!   Na realidade eu gostaria que o nome de quem não efetuou o pagamento foi listado em um dbgrid.
GOSTEI 0
Rodrigo Pereira

Rodrigo Pereira

28/11/2010

Coloca onde data de pagamento is null, faz o join e na clausula where data de pagamento is null
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

28/11/2010

para que o nome do devedor saia na relação, você precisa juntar a tabela onde esse nome está gravado.

GOSTEI 0
POSTAR