GARANTIR DESCONTO

Fórum Filtro complicado !!!! #289047

21/07/2005

0

Salve galera delphianda !!!!

É o seguinte galera a estrutura do meu banco de dados é a seguinte:
[list:18066e3ad3]
[*:18066e3ad3]Banco de dados Interbase.
[*:18066e3ad3]Tabela cliente onde salva os dados pessoais do cliente (nome,endereço,etc...).
[*:18066e3ad3]outra tabela ligada com a tabela cliente que salva os contratos que o cliente tem.
[*:18066e3ad3]e uma 3ª tabela ligada na tabela que mostra os contratos , essa tabela mostra os tados do contrato (vencimento das parcelas,avalista etc...)
[/list:u:18066e3ad3]

[size=12:18066e3ad3][color=blue:18066e3ad3]Agora que vem a bucha é o seguinte, tenho que selecionar em uma query os dados da tabela cliente (nome,endereço etc...)so que so quero os clientes que tenhao um contrato e que a parcela numero tal (campo parcela_1) esteja entre as datas estipulas antes do filtro (em um datetimepicker).Espero que alguem aqui saiba !!!![/size:18066e3ad3][/color:18066e3ad3]


[size=20:18066e3ad3][color=red:18066e3ad3]Valeu pessoal!!![/size:18066e3ad3][/color:18066e3ad3]


Guilherme

Guilherme

Responder

Posts

21/07/2005

Fabio Nascimento

Do jeito que eu entendi, é pra ser algo assim:

select * from clientes c
join contratos t
where t.parcela_1 between :data1 and data2
order by c.codigo


Responder

Gostei + 0

21/07/2005

Guilherme

Cara desse jeito ai nao deu nao !!!

Esqueci de por o nome das tabelas:
[size=14:7f576e6532][color=red:7f576e6532]Cliente,Contratos,dados_contrato[/size:7f576e6532][/color:7f576e6532]



A tabela contratos pode receber mais de 1 registro por cliente e a tabela dados_contrato so recebe 1 registro por contrato.

Espero ter ajudado mais !!!!


Responder

Gostei + 0

25/07/2005

Guilherme

nada pessoal ?????


Responder

Gostei + 0

25/07/2005

Rjun

Select 
  Cl.Codigo,
  Cl.Nome,
  Count(Co.NumContrato) 
From
  Clientes Cl
Left Join
  Contrato Co On Co.CodCliente = Cl.Codigo
Left Join
  DadosCon Dc on Dc.NumContrato = Co.NumContrato
Where
  Dc.Data Between :Data1 and :Data2
Group By
  Cl.Codigo,
  Cl.Nome
Having Count(Co.NumContrato) = 1



Responder

Gostei + 0

25/07/2005

Guilherme

mais i si o cliente tiver mais de 1 contrato vai selecionar + de 1 vez ???


este codigo verifica todos os contratos ????


Responder

Gostei + 0

25/07/2005

Rjun

Do jeito que está, so seleciona os clientes que tenham 1 contrato. Sim, ele verifica todos os contratos.


Responder

Gostei + 0

25/07/2005

Guilherme

tipo o cliente tem 10 contratos entre o periodo das datas ai ele mostra apenas 1 ????


cara como so iniciante em sql sera q vc me esplica as funçao q vc uso ai ???/


Responder

Gostei + 0

25/07/2005

Rjun

Não...ele vai totalizar o numero de contratos, para cada cliente dentro da data especificada...se o numero de contratos for igual a 1 então ele seleciona. Não é isso que você quer fazer?


Responder

Gostei + 0

25/07/2005

Guilherme

intao si for 10 contratos no periodo de datas vai aparecer 10 vezes esse cliente é isso ???


Responder

Gostei + 0

25/07/2005

Rjun

Amigo, se ele tem 10 contratos então na totalização o cliente X terá 10 contratos. A clausula Having está igual a 1. Então ele não aparece.

Cliente Contrato
000001 0000001
000002 0000002
000001 0000003
000001 0000004
000002 0000005

Se fosse um select so com totalização, o resultado seria assim:

Cliente Total
000001 3
000002 2


Responder

Gostei + 0

25/07/2005

Guilherme

intao so esta motrando o 1º contrato ??????


me add ai no msn !!!!!


Responder

Gostei + 0

25/07/2005

Rjun

Cara, ele ta totalizando....o contratos 1, 3 e 4 pertecem ao cliente 1 e os contratos 2 e 5 ao cliente 2. Então o cliente 1 tem 3 contratos e o cliente 2 tem 2 contratos.


Responder

Gostei + 0

25/07/2005

Guilherme

so q eu quero q tipo si o cliente tem 5 contrato so q 3 deles estao entre as datas indicadas intao este cliente tem q me retornar 3 vezes é isso q quero !!!


Responder

Gostei + 0

25/07/2005

Rjun

Putz....se era só isso, vc podia ter deixado mais claro...

Select 
  Cl.Codigo, 
  Cl.Nome 
  Co.NumContrato 
From 
  Clientes Cl 
Left Join 
  Contrato Co On Co.CodCliente = Cl.Codigo 
Left Join 
  DadosCon Dc on Dc.NumContrato = Co.NumContrato 
Where 
  Dc.Data Between :Data1 and :Data2 



Responder

Gostei + 0

25/07/2005

Guilherme

putz cara vc é o salvador da patria !!!!!!

si nao for abuso vc me esplica como q funciona essas funçao q vc uso ???


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar