Rodrigo Niedzeilski Postado Novembro 16, 2007 Denunciar Share Postado Novembro 16, 2007 Amigos,Gostaria de uma ajuda... Eu tenho uma tabela que possui a data do pagamento...O usuário digita um período de tempo e a consulta retorna os clientes que não pagaram neste período.A minha dúvida é a seguinte... Gostaria de extrair todos os meses que o cliente não pagou...Por exemplo: cliente 1 pagou os meses04, 05, 07, 09 e 11O sistema deverá informar os meses 06, 08 e 10.Se existir uma possibilidade de resolver meu problema eu agradeço, pois já tentei diversas formas que corrigí-lo.Agradecido,Rodrigo Link para o comentário Compartilhar em outros sites More sharing options...
0 kandrade Postado Novembro 16, 2007 Denunciar Share Postado Novembro 16, 2007 Sem entender a estrutura das tabelas não consigo te ajudar muito.Pergunto, voce consegue fazer uma query que retorne os meses que o cara pagou? Link para o comentário Compartilhar em outros sites More sharing options...
0 Rodrigo Niedzeilski Postado Novembro 16, 2007 Autor Denunciar Share Postado Novembro 16, 2007 Os meses que o cara pagou eu consigo..O que eu quero saber são os meses que não foram pagos...Estou no trabalho é não tenho a estrutura aqui.Mais são duas tabelas uma de cliente (id, nome, datacadastro) que se relaciona ONE-TO-MANY com uma de pagamento (id, idcliente, valorpago, datapagamento)É mais ou menos isso. Link para o comentário Compartilhar em outros sites More sharing options...
0 kandrade Postado Novembro 16, 2007 Denunciar Share Postado Novembro 16, 2007 Mais uma pergunta. :rolleyes: Na sua tabela pagamento está cadastrado os meses pagos e não pagos ou apenas os pagos? Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Novembro 16, 2007 Denunciar Share Postado Novembro 16, 2007 (editado) Amigos,Gostaria de uma ajuda... Eu tenho uma tabela que possui a data do pagamento...O usuário digita um período de tempo e a consulta retorna os clientes que não pagaram neste período.A minha dúvida é a seguinte... Gostaria de extrair todos os meses que o cliente não pagou...Por exemplo: cliente 1 pagou os meses04, 05, 07, 09 e 11O sistema deverá informar os meses 06, 08 e 10.Se existir uma possibilidade de resolver meu problema eu agradeço, pois já tentei diversas formas que corrigí-lo.Agradecido,RodrigoPara ajudá-lo na confecção de sua select necessito de mais informações (não precisam ser reais apenas um modelo do que você quer). Uma pequena estrutura com os campos mais importantes, tais como: data de pagamento (com informação de preenchimento obrigatório ou não), data de vencimento (com informação de preenchimento obrigatório ou não), etc.Se constam no cadastro somente a data do pagamentoattDenis Courcy Editado Novembro 16, 2007 por Denis Courcy Link para o comentário Compartilhar em outros sites More sharing options...
0 Rodrigo Niedzeilski Postado Novembro 16, 2007 Autor Denunciar Share Postado Novembro 16, 2007 Mais uma pergunta. :rolleyes: Na sua tabela pagamento está cadastrado os meses pagos e não pagos ou apenas os pagos?Só estão cadastradas as datas que os clientes pagaram.. Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Novembro 16, 2007 Denunciar Share Postado Novembro 16, 2007 Oi, Rodrigo!Analisei seu problema e cheguei a uma solução que passa por alguns passos:1 Criação de uma tabela temporária e carga dos dados nela (poderia ser uma storage procedure)A tabela temporária deverá ter os campos idcliente e mes.a carga consistem em 12 registro para cada clienteo primary key ficará com os dois campos (idcliente, mes);Create temporary table temp ( idcliente int not null, mes int not null, primary (idcliente, mes) ); 2 A seleção que fornecerá sua resposta Select t.idcliente, t.mes from temp t left join pagamento p on t.clienteid = p.clienteid and t.mes = month(p.datapagamento) where ISNULL(p.idcliente); 3 A exclusão da tabela temporária para liberação de memória Drop temp;Explicando o código:Ao criar a tabela temporária com base na tabela de clientes estabelecemos um relacionamento válido para a tabela de pagamentos que responde a pergunta quem não pagouNo Select a cláusula Left Join retornará todas as linhas da tabela temp independente ou não se há correspondente com pagamento.Na cláusula where criamos o filtro para que seja retornado somente o que é desejado.Inconvenientes:A tabela temp tem que ser criada todas as vezes que necessitar rodar este tipo de consultaA comparação t.mes = month(p.datapagamento) resultará em um table scan (ou seja, uma varredura completa em todas as 2 tabelas) porque a função precisa ser avaliada para cada registro da tabela pagamentos. Uma forma de melhorar esta performance seria criar um campo com mês de pagamento e este campo deveria ser indexado)Analise e informe sucesso ou fracassoattDenis Courcy Link para o comentário Compartilhar em outros sites More sharing options...
0 Rodrigo Niedzeilski Postado Novembro 16, 2007 Autor Denunciar Share Postado Novembro 16, 2007 Denis,Valeu mesmo.. Este sistema estou desenvolvendo em casa.... Por isso só mais tarde te dou um feedback da situação.O grande problema disso foi que o meu cliente não usa ORDEM DE PAGAMENTO, através dela ficaria mais fácil gerar o relatório como ele solicitou.Obrigado pela ajuda.Rodrigo Link para o comentário Compartilhar em outros sites More sharing options...
0 kandrade Postado Novembro 16, 2007 Denunciar Share Postado Novembro 16, 2007 A solução que eu recomendaria é:Implementar isso na linguagem de programação.Fica bem simples.Um array com os elementos {1,2,3,4,5,6,7,8,9,10,11,12}E um array com o retorno da query que indica os meses que foi efetuado o pagamento.Depois basta compara-los.Valeu pela dica Denis. ;) Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest --rodrigoon -- Postado Dezembro 17, 2007 Denunciar Share Postado Dezembro 17, 2007 Galera,Desculpe a demora.. Conversei com o meu cliente, ele aceitou que fosse digitado a data do vencimento para o pagamento de seus clientes, com isso só tive que incluir mais um campo na tabela de pagamento.E depois verificar pela data de pagamento quem pagou ou não, já que todos os clientes terão uma data de vencimento por mês.Obrigado Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Rodrigo Niedzeilski
Amigos,
Gostaria de uma ajuda... Eu tenho uma tabela que possui a data do pagamento...
O usuário digita um período de tempo e a consulta retorna os clientes que não pagaram neste período.
A minha dúvida é a seguinte... Gostaria de extrair todos os meses que o cliente não pagou...
Por exemplo: cliente 1 pagou os meses
04, 05, 07, 09 e 11
O sistema deverá informar os meses 06, 08 e 10.
Se existir uma possibilidade de resolver meu problema eu agradeço, pois já tentei diversas formas que corrigí-lo.
Agradecido,
Rodrigo
Link para o comentário
Compartilhar em outros sites
9 respostass a esta questão
Posts Recomendados