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 

Dúvida SQL pagamentos

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
grsoft
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 10 de Abril de 2006
Mensagens: 107

MensagemEnviada: Qui Set 22, 2016 6:46 am    Assunto: Dúvida SQL pagamentos Responder com Citação

Opa pessoal, seguinte:

Eu tenho um software de gerenciamento de alugueis feito em delphi e estou me enrolando numa SQL.

Eu tenho o seguinte cenário (resumido):

TABELA CLIENTES
COD
NOME

TABELA PROGRAMAS
COD
CODCLI

TABELA PAGAMENTOS
COD
CODPROG
DATAVENCIMENTO
DATAPAGAMENTO

Cada cliente pode ter vários programas e os programas tem vários pagamentos.

O que eu preciso é de um relatório onde eu possa saber quais os clientes, e seus respectivos programas, que fizeram o pagamento no mês passado (essa mês pode ser variável ou até escolher, tipo, nos 2, 3, 4 últimos meses) e não fizeram esse mês.

Se alguém puder me ajudar eu agradeço.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular  
3Soft-Oto
Novato
Novato


Registrado: Quarta-Feira, 14 de Setembro de 2016
Mensagens: 10

MensagemEnviada: Sex Set 23, 2016 11:06 am    Assunto: Responder com Citação

Pelo que eu entendi, tente algo do tipo:

Código:

SELECT C.COD, C.NOME, P.COD
FROM PAGAMANTOS AS PG
INNER JOIN PROGRAMAS ON PG.CODPROG = P.COD
INNER JOIN CLIENTES ON P.CODCLI = C.COD
WHERE PG.DATAPAGAMENTO >= 'dd/MM/yyyy' AND  PG.DATAPAGAMENTO <= 'dd/MM/yyyy'

_________________
_____________________
XXXXXXXXXXXXXXXXXX
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular  
grsoft
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 10 de Abril de 2006
Mensagens: 107

MensagemEnviada: Sex Set 23, 2016 12:07 pm    Assunto: Responder com Citação

3Soft-Oto escreveu:
Pelo que eu entendi, tente algo do tipo:

Código:

SELECT C.COD, C.NOME, P.COD
FROM PAGAMANTOS AS PG
INNER JOIN PROGRAMAS ON PG.CODPROG = P.COD
INNER JOIN CLIENTES ON P.CODCLI = C.COD
WHERE PG.DATAPAGAMENTO >= 'dd/MM/yyyy' AND  PG.DATAPAGAMENTO <= 'dd/MM/yyyy'


Dessa forma eu teria os pagamentos realizados num determinado período e não é bem isso q quero. Eu quero saber quais clientes pagaram no mês passado ou nos últimos 2 meses, ou nos últimos 3 meses e não pagaram esse mês.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular  
syler
Profissional
Profissional


Registrado: Segunda-Feira, 25 de Fevereiro de 2008
Mensagens: 734
Localização: Apucarana - Norte do Paraná

MensagemEnviada: Sáb Set 24, 2016 2:07 pm    Assunto: Responder com Citação

Tente isso:

Código:


SELECT C.COD
     , C.NOME
     , P.COD
     , P.DATAVENCIMENTO
     , P.DATAPAGAMENTO 
  FROM PAGAMANTOS AS PG
  LEFT JOIN PROGRAMAS ON PG.CODPROG = P.COD
  LEFT JOIN CLIENTES ON P.CODCLI = C.COD
 WHERE PG.DATAPAGAMENTO BETWEEN :INI AND:FIM
 ORDER BY C.NOME
        , P.DATAVENCIMENTO



Daí você passa o parâmetro do período que precisa.
_________________
Alex Sandro de Oliveira
Analista Programador Delphi
Freelancer
Estudante de Desenvolvimento Web, Marketing Digital e Designer Gráfico na Udemy
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail  
grsoft
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 10 de Abril de 2006
Mensagens: 107

MensagemEnviada: Seg Set 26, 2016 7:51 am    Assunto: Responder com Citação

Dessa forma eu teria os pagamentos realizados num determinado período e não é bem isso q quero. Eu quero saber quais clientes pagaram no mês passado ou nos últimos 2 meses, ou nos últimos 3 meses e não pagaram esse mês.

syler escreveu:
Tente isso:

Código:


SELECT C.COD
     , C.NOME
     , P.COD
     , P.DATAVENCIMENTO
     , P.DATAPAGAMENTO 
  FROM PAGAMANTOS AS PG
  LEFT JOIN PROGRAMAS ON PG.CODPROG = P.COD
  LEFT JOIN CLIENTES ON P.CODCLI = C.COD
 WHERE PG.DATAPAGAMENTO BETWEEN :INI AND:FIM
 ORDER BY C.NOME
        , P.DATAVENCIMENTO



Daí você passa o parâmetro do período que precisa.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular  
imex
Moderador
Moderador


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

MensagemEnviada: Seg Set 26, 2016 10:32 am    Assunto: Responder com Citação

Bom dia,

Experimente mais ou menos dessa forma:

Código:
select *
from Pagamentos s pag
inner join Programas as pgm
    on pgm.Cod = pag.CodProg
inner join Clientes as cli
    on cli.cod = pgm.CodCli
where
    pag.DataPagamento is null and
    pag.DataVencimento between :DataAtualIni and :DataAtualFim and
    exists(select 1
           from Pagamentos as s
           where
               s.CodProg = pag.CodProg and
               s.DataPagamento is not null and
               s.DataVencimento between :DataAntIni and :DataAntFim)


Espero que ajude

_________________
Assinatura: http://www.imoveisemexposicao.com.br/imobiliarias-em-guarulhos
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular  
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi 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