Fórum Aplicar filtro após fazer primeira verificação na query #515344

31/03/2015

0

Olá pessoal minha dúvida é a seguinte tenho a query abaixo
select * from 
(Select 
cartoes.nome, 
cartoes.cartao_id,
cartoes.titular as cartaotitu,
conveniados.chapa, 
cartoes.codcartimp,   
conveniados.titular,
cartoes.DATA_NASC,
conveniados.empres_id, 
conveniados.cidade, 
cartoes.dtcadastro,   
codcartimp as cartao,
empresas.nomecartao as empresa, 
cartoes.conv_id 
from cartoes join conveniados on conveniados.conv_id = cartoes.conv_id 
and coalesce(conveniados.apagado,'N') <> 'S' join 
empresas on empresas.empres_id  = conveniados.empres_id    
where coalesce(cartoes.apagado,'N') <> 'S'
 and coalesce(cartoes.jaemitido,'N') = 'N' 
 and coalesce(conveniados.liberado,'S') = 'S'
 and coalesce(cartoes.liberado,'S') = 'S' 
) as a where datediff(year,a.DATA_NASC,getdate()) >= 18


preciso retornar os conveniados maiores de 18 anos apenas se a empresa tiver id Empres_id = 455 se não não aplica o filtro: datediff(year, a.Data_Nasc, getdate()) >= 18



Alguém pode me ajudar? Obrigado
Sidnei Junior

Sidnei Junior

Responder

Post mais votado

31/03/2015

Boa solução !!!

Marcos P

Marcos P
Responder

Gostei + 1

Mais Posts

31/03/2015

Marcos P

Sidnei,

Se a ideia é tratar isso em apenas uma execução e na própria query, você deve partir para o uso de uma query dinâmica, que são sempre recomendadas quando a estrutura da consulta variar em função de regras de negócio externas.

Dê uma olhada no link... Query Dinâmica

Senão lhe ajudar, me avise... que trabalhamos na sua query mesmo.
Responder

Gostei + 0

31/03/2015

Sidnei Junior

é verdade vc tem razão Marcos, mas de qualquer forma resolvi da seguinte forma

select * from 
(Select 
cartoes.nome, 
cartoes.cartao_id,
cartoes.titular as cartaotitu,
conveniados.chapa, 
cartoes.codcartimp,   
conveniados.titular,
cartoes.DATA_NASC,
datediff(year,DATA_NASC,getdate()) as IDADE,
conveniados.empres_id, 
conveniados.cidade, 
cartoes.dtcadastro,   
codcartimp as cartao,
empresas.nomecartao as empresa, 
cartoes.conv_id 
from cartoes join conveniados on conveniados.conv_id = cartoes.conv_id 
and coalesce(conveniados.apagado,'N') <> 'S' join 
empresas on empresas.empres_id  = conveniados.empres_id    
where coalesce(cartoes.apagado,'N') <> 'S'
 and coalesce(cartoes.jaemitido,'N') = 'N' 
 and coalesce(conveniados.liberado,'S') = 'S'
 and coalesce(cartoes.liberado,'S') = 'S' 
 AND CONVENIADOS.CONV_ID = 120695
) as a where (a.EMPRES_ID !=455 or datediff(year,a.DATA_NASC,getdate()) >= 18)


na verdade o or resolveu minha vida. Obrigado
Responder

Gostei + 0

31/03/2015

Thiago Santana

Sidnei se em sua query tivesse um Group By você poderia utilizar o HAVING!
Responder

Gostei + 0

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

Aceitar