Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 515354
            [titulo] => Aplicar filtro após fazer primeira verificação na  query
            [dataCadastro] => DateTime Object
                (
                    [date] => 2015-03-31 11:57:53
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 378439
            [status] => A
            [isExample] => 
            [NomeUsuario] => Marcos P
            [Apelido] => 
            [Foto] => 378439_20140801115452.png
            [Conteudo] => Boa solução !!!
        )

)

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

Sidnei Junior
|
MVP
    31 mar 2015

Olá pessoal minha dúvida é a seguinte tenho a query abaixo
#Código

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

Post mais votado

Marcos P
   - 31 mar 2015

Boa solução !!!

Marcos P
   - 31 mar 2015

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.

Sidnei Junior
|
MVP
    31 mar 2015

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

#Código

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

Thiago Santana
   - 31 mar 2015

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