Aplicar filtro após fazer primeira verificação na query

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

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... [url:descricao=Query Dinâmica]https://www.devmedia.com.br/forum/select-com-atributo-in-em-campos-inteiros-e-parametros-varchar/513914[/url]

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

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

31/03/2015

Thiago Santana

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

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar