Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

FabianoSouza

Select com LIKE e CASE

Recommended Posts

Em minha consulta uso o CASE e concatenação de texto com um campo (trecho em Azul).
O objetivo é construir uma mensagem final amigável. Mas preciso que o resultado disso seja "pesquisável" usando LIKE.

SELECT
 AcoesPreferenciais.Id, AcoesPreferenciais.CodigoServico, 
 AcoesPreferenciais.ModoDeArmazenamento, AcoesPreferenciais.CodigoProprietario, 
 AcoesPreferenciais.DataCad, ServicoAlias,  BD.dbo.Servico.ServicoIcone, 
 BD.dbo.Servico.ServicoPasta, FuncionalidadesDeServico.Descricao, 

 (CASE WHEN BD.dbo.FuncionalidadesDeServico.CodigoComandoDeServico = '1' 
 THEN 'Criar item em ' + ServicoAlias 
 ELSE 
 CASE WHEN BD.dbo.FuncionalidadesDeServico.CodigoComandoDeServico = '4' 
 THEN 'Ir para ' + ServicoAlias 
 ELSE
 CASE WHEN BD.dbo.FuncionalidadesDeServico.CodigoComandoDeServico = '5' 
 THEN 'Ver dados em ' + ServicoAlias
 END END END)  AS Msg ,  
 BD.dbo.FuncionalidadesDeServico.Pagina

 FROM 
 AcoesPreferenciais 
 INNER JOIN
 BD.dbo.FuncionalidadesDeServico 
 ON 
 AcoesPreferenciais.CodigoAreaDoServico 
 = 
 BD.dbo.FuncionalidadesDeServico.CodigoComandoDeServico 
 AND 
 AcoesPreferenciais.CodigoServico 
 = 
 BD.dbo.FuncionalidadesDeServico.CodigoServico 
 INNER JOIN 
 BD.dbo.Servico 
 ON 
 BD.dbo.FuncionalidadesDeServico.CodigoServico 
 = 
 BD.dbo.Servico.ServicoCod 
 WHERE 
 (AcoesPreferenciais.ModoDeArmazenamento = 'True') 
 AND 
 (AcoesPreferenciais.CodigoProprietario = 'id') 
 AND 
 ((BD.dbo.FuncionalidadesDeServico.CodigoComandoDeServico = 1)  
 OR 
 (BD.dbo.FuncionalidadesDeServico.CodigoComandoDeServico = 4)
 OR 
 (BD.dbo.FuncionalidadesDeServico.CodigoComandoDeServico = 5))
 AND (Msg LIKE '%string_de_pesquisa%') 
ORDER BY Msg

Preciso fazer com que o LIKE funcione para pesquisar pelo "pseudo campo" Msg.

Da forma que está acima, não funciona.

Como faço?

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se entendi bem mas faça da query uma tabele virtual

select *
from
(
SELECT
AcoesPreferenciais.Id, AcoesPreferenciais.CodigoServico,
AcoesPreferenciais.ModoDeArmazenamento, AcoesPreferenciais.CodigoProprietario,
AcoesPreferenciais.DataCad, ServicoAlias, BD.dbo.Servico.ServicoIcone,
BD.dbo.Servico.ServicoPasta, FuncionalidadesDeServico.Descricao, 

(CASE WHEN BD.dbo.FuncionalidadesDeServico.CodigoComandoDeServico = '1' 
THEN 'Criar item em ' + ServicoAlias 
ELSE 
CASE WHEN BD.dbo.FuncionalidadesDeServico.CodigoComandoDeServico = '4' 
THEN 'Ir para ' + ServicoAlias 
ELSE
CASE WHEN BD.dbo.FuncionalidadesDeServico.CodigoComandoDeServico = '5' 
THEN 'Ver dados em ' + ServicoAlias
END END END) AS Msg ,
BD.dbo.FuncionalidadesDeServico.Pagina

FROM
AcoesPreferenciais 
INNER JOIN
BD.dbo.FuncionalidadesDeServico 
ON
AcoesPreferenciais.CodigoAreaDoServico 
=
BD.dbo.FuncionalidadesDeServico.CodigoComandoDeServico 
AND
AcoesPreferenciais.CodigoServico 
=
BD.dbo.FuncionalidadesDeServico.CodigoServico 
INNER JOIN
BD.dbo.Servico 
ON
BD.dbo.FuncionalidadesDeServico.CodigoServico 
=
BD.dbo.Servico.ServicoCod 
WHERE 
(AcoesPreferenciais.ModoDeArmazenamento = 'True') 
AND 
(AcoesPreferenciais.CodigoProprietario = 'id') 
AND 
((BD.dbo.FuncionalidadesDeServico.CodigoComandoDeServico = 1) 
OR 
(BD.dbo.FuncionalidadesDeServico.CodigoComandoDeServico = 4)
OR 
(BD.dbo.FuncionalidadesDeServico.CodigoComandoDeServico = 5))

)  where msg like '%aaa%'
order by msg

Compartilhar este post


Link para o post
Compartilhar em outros sites

(CASE WHEN BD.dbo.FuncionalidadesDeServico.CodigoComandoDeServico = '1' THEN 'Criar item em ' + ServicoAlias WHEN BD.dbo.FuncionalidadesDeServico.CodigoComandoDeServico = '4' THEN 'Ir para ' + ServicoAlias

WHEN BD.dbo.FuncionalidadesDeServico.CodigoComandoDeServico = '5' THEN 'Ver dados em ' + ServicoAlias

Else ' ' END) AS Msg

Compartilhar este post


Link para o post
Compartilhar em outros sites

A ideia e +ou- esta , questao de ajustar sintaxe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.