Ir para conteúdo

POWERED BY:

Arquivado

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

hellyson

[Resolvido] Query

Recommended Posts

Senhores,

 

Tenho 3 menus:

UF

Cidade

Site

 

Uma tabela que contém os 3 campos:

UF

Cidade

Site

 

Na minha aplicação, se eu selecionar a UF = MG por exemplo, devará trazer somente as Cidades e Sites com UF = MG.

Se eu selecionar o Site = Centro, deverá trazer somente as Cidades e os UFs que tenham o Site = Centro

Se eu não selecionar nenhum Site, UF ou Cidade, na escola de qualquer um, iria trazer todos.

 

Fiz assim para cada menu (exemplo abaixo foi da cidade, porém estão todos iguais, só mudando o campo):

 

 

select

distinct cidade

from

tblSite

where

status = 'Ativo'

and

(

uf = '{campouf}' OR

cidade= '{campocidade}' OR

site= '{camposite}'

)

order by cidade

 

//Coloquei a string acima no menu cidade, se antes eu selecionar o Site = Centro, realmente irá mostrar somente as cidades que tem o Site = Centro, porém se eu não selecionar nada, não traz nada, queria algo assim:

 

select

distinct cidade

from

tblSite

where

status = 'Ativo'

and

(

if '{campouf}' = null then

ignoraclausula

else

uf = '{campouf}'

end

)

AND

(

if '{campocidade}' = null then

ignoraclausula

else

cidade = '{campocidade}'

end

)

AND

(

if '{camposite}' = null then

ignoraclausula

else

site= '{camposite}'

end

)

order by cidade

 

Agradeço quem puder me ajudar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use NVL.

 

exemplo

 

... WHERE UF = NVL({camposite},UF) AND ...

Se o valor do parametro for nulo força que UF seja igual a UF, ou seja tudo, do contrário

testa se é igual a UF informada.

 

Ajudou ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem tambem o NVL2(expression, value_if_null, value_if_null)

=P

 

Ja tive que fazer uma condicional parecida,

eu tive mais desempenho em mandar a a query pronta da aplicacao para o banco.

 

na aplicacao determinando quais seriam os campos de pesquisa.

e na query buscar com o natural join, mesmo...

 

ve qual solucao fica melhor para voce...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use NVL.

 

exemplo

 

... WHERE UF = NVL({camposite},UF) AND ...

Se o valor do parametro for nulo força que UF seja igual a UF, ou seja tudo, do contrário

testa se é igual a UF informada.

 

Ajudou ?

 

 

Obrigado Motta, tive ajuda de um amigo, ficou assim:

 

Select Distinct cidade

From tblsite

Where status = 'Ativo'

And ('{campouf}' Is Null Or uf = '{campouf}')

And ('{campocidade}' Is Null Or cidade = '{campocidade}')

And ('{camposite}' Is Null Or site = '{camposite}')

Order By cidade

 

Valeu a todos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poderia ser também :

Select Distinct cidade
From tblsite
Where status = 'Ativo'
And nvl('{campouf}',uf) = uf
And nvl('{campocidade}',cidade) = cidade
And nvl('{camposite}',site) = site
Order By cidade

Mas se funcionou deixa queito.

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.