AJUDA COM SELECT (INTEIRO ENTRE DOIS CAMPOS)

 Tópico anterior Próximo tópico Novo tópico

AJUDA COM SELECT (INTEIRO ENTRE DOIS CAMPOS)

SQL / DATABASE

 Compartilhe  Compartilhe  Compartilhe
#490333 - 05/09/2019 15:07:22

VERAPALI
CURITIBA
Cadast. em:Dezembro/2003


Supondo que meus campos sao no padrao

1x - 1 - 999999
2x - 1 - 999999
3x - 200 - 299
4x - 300 - 399
5x - 400 - 499

Eu quero trazer para o inteiro 265 por exemplo, as opções 1x, 2x e 3x

Select *  from tabela pc where ((pc.vl_minimo_condicao = 1 and pc.vl_maximo_condicao = 999999) or pc.vl_minimo_condicao >= 265 and pc.vl_maximo_condicao <= 265)

Mas nao esta certo o resultado, onde estou errando ?


Vera Lucia


#490335 - 05/09/2019 15:31:57

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Select {Campo contendo 1x, 2x...} from {sua tabela} where {campo com maior valor(os de final 99) >= {seu campo texto ou variável}
Exemplo:
cmd.Text = "select multiplicador from tabela where pc.vl_minimo_condicao >= 1 and pc.vl_maximo_condicao = " + txtMaximoCondicao.Text

_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


#490336 - 05/09/2019 16:54:33

VERAPALI
CURITIBA
Cadast. em:Dezembro/2003


 Anexos estao visíveis somente para usuários registrados

Obrigada, mas ainda não cheguei nem perto...
Mas acredito que sou eu que preciso talvez preparar antecipadamente os intervalos

where ((pc.vl_minimo_condicao = 1 and pc.vl_maximo_condicao = 999999) or (pc.vl_minimo_condicao > 1 and pc.vl_maximo_condicao <= 408))


Acredito que deva ter que substituir o valor inicial do range para algo como maximo - 100 para começar a dar certo

Vera Lucia


#490338 - 05/09/2019 17:01:56

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Quando você inclui isso nas condições:
pc.vl_minimo_condicao = 1 and pc.vl_maximo_condicao = 999999

Você está incluindo todos os registros

_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


#490339 - 05/09/2019 17:07:10

VERAPALI
CURITIBA
Cadast. em:Dezembro/2003


Sim e não...
A questão é que quando a condicao deve ser acatada   independente de valor , eu uso esse interfugio.
Porem por exemplo, para um valor de 408 seria o mesmo que trazer tudo, enquanto que um valor de 308 deveria trazer somente ate a condicao 5

Vera Lucia


#490341 - 05/09/2019 18:28:32

VERAPALI
CURITIBA
Cadast. em:Dezembro/2003


Quase lá...

  and ((pc.vl_minimo_condicao = 1 and pc.vl_maximo_condicao = 999999) or (408 between pc.vl_minimo_condicao and pc.vl_maximo_condicao))

Acaba trazendo o ultimo intervalo, mas despreza os demais

and ((pc.vl_minimo_condicao = 1 and pc.vl_maximo_condicao = 999999) or (pc.vl_minimo_condicao > 1 and pc.vl_maximo_condicao <= 408))

Traz todos os anteriores, mas não traz o último



Vera Lucia


#490342 - 05/09/2019 18:58:00

VERAPALI
CURITIBA
Cadast. em:Dezembro/2003


Um sqlfiddle para ser mais produtivo

http://sqlfiddle.com/#!9/43d802/1

Vera Lucia


#490343 - 05/09/2019 19:09:33

OCELOT
SOROCABA
Cadast. em:Março/2012


Última edição em 09/09/2019 16:03:25 por OCELOT

Você está invertendo as verificações, você está fazendo assim

pc.vl_minimo_condicao > 1 and pc.vl_maximo_condicao <= 408

Se trocarmos os valores dos campos a verificação sendo feita seria esta

1 > 1 and 999999 <= 408

Dessa forma nunca vai trazer nada, o seu valor mínimo deve ser menor ou igual ao valor que você quer, e o máximo deve ser maior ou igual

where pc.vl_minimo_condicao <= 408 and pc.vl_maximo_condicao >= 408

E nem mesmo deve precisar da outra verificação se for igual a 1 e igual a 999999 pois qualquer valor vai estar neste range, ou você poderia alterar para ser de 0 a 999999 se tiver algo que custe centavos




#490350 - 06/09/2019 11:35:10

VERAPALI
CURITIBA
Cadast. em:Dezembro/2003


Ocelot

Por favor da uma olhada nesse link e brinca um pouco, voce vai ver que o 408 até vai funcionar, mas se tentar com 508 por exemplo já não rola pois ele trás 'aquele' range e não os ranges até ele (com 508, deveria trazer 400 também).

Select * from newtable where ((vmin = 1 and vmax = 999999) or  (vmin > 1 and 408 between vmin and vmax));


http://sqlfiddle.com/#!9/43d802/10

Vera Lucia


#490351 - 06/09/2019 12:02:13

VERAPALI
CURITIBA
Cadast. em:Dezembro/2003


Última edição em 06/09/2019 12:02:27 por VERAPALI

Deixei um exemplo bem mais elaborado, quem puder ajudar agradeço

http://sqlfiddle.com/#!9/47ee9e/7


Vera Lucia


#490354 - 06/09/2019 16:58:04

FOXMAN
BARRETOS
Cadast. em:Janeiro/2001


Membro da equipe

Última edição em 06/09/2019 17:22:57 por FOXMAN

Citação:
:
Deixei um exemplo bem mais elaborado, quem puder ajudar agradeço

http://sqlfiddle.com/#!9/47ee9e/7

Vera, não sei como foi formado a estrutura de dados, mas da forma que está, está completamente errado.

Veja bem :

Vc tem tres registros absolutamente iguais, para indices diferentes(onde o correto seria apenas um registro, ou um group by).
Vc tem um registro minimo e um máximo maior que outros registros que estão entre esse intervalo.

Eu não faria dessa forma , mas ve se te ajuda.....

#expected result include nump = 1,2,3 - ok
Select * from newtable
where vmin between 1 and 999999 and
vmin not between 200 and 299 and
vmin not between 300 and 399 and
vmin not between 400 and 999999;

#1,2,3,4 - ok
Select * from newtable
where vmin not between 400 and 999999 and
vmin between 1 and 999999 and
vmin not between 300 and 399;

#1,2,3,4,5 - ok
Select * from newtable
where vmin not between 400 and 999999 and
vmin between 1 and 999999 and
vmin between 1 and 399;

#1,2,3,4,5,6 -ok
Select * from newtable
where vmin between 1 and 999999






Grupo DotNet.Br no FaceBook

Grupo WhatsDev



 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por VERAPALI em 09/09/2019 19:29:08