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!