Rango con varios campos

22/06/2004 - 21:35 por Carlos Gutierrez | Informe spam
Hola

Tengo poca experiencia con consultas complejas, ahorita tengo duda con esto:

Suponiendo una tabla:

CampoA,CampoB
1,6
1,7
1,8
2,6
2,7
2,8
3,6
3,7
3,8

con un indice sobre Campo1,Campo2

¿Como puedo hacer un query que me de el rango de 1,8 a 3,6?, osea:
1,8
2,6
2,7
2,8
3,6
y que ademas este optimizado para usar el indice?

SELECT * FROM Tabla WHERE CampoA BETWEEN 1 and 3 AND CampoB BETWEEN 'c' AND
'a'

no funciona

SELECT * FROM Tabla WHERE ((CampoA*100)+CampoB) BETWEEN 108 AND 306

si funciona, pero hace un Scan, no un Seek.

Segun yo, deberia ser algo asi:

SELECT * FROM Tabla WHERE CampoA,CampoB BETWEEN 1,8 AND 3,6

pero esta sintaxis no existe.

Gracias de antemano por cualquier idea o comentario.

Carlos Gutiérrez
carlosg@sca.com.mx

Gracias de
 

Leer las respuestas

#1 Gustavo Larriera [MVP SQL]
22/06/2004 - 21:52 | Informe spam
Sin dudar que es un acertijo interesante el que planteas.

Pregunto: Qué representan esos números? porque veo que intentas usarlos como
si fueran un unico dato (parejas de numeros) por tanto me surge la duda de
diseño... esos números no podrían estar juntos en una sola columna?

La consulta que te ha funcionado no pudo optimizarse debido a que estás
usando una expresión numérica...

Gustavo Larriera, MVP-SQL, MCSE
Uruguay LatAm
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.
"Carlos Gutierrez" wrote in message
news:VR%Bc.17974788$
Hola

Tengo poca experiencia con consultas complejas, ahorita tengo duda con


esto:

Suponiendo una tabla:

CampoA,CampoB
1,6
1,7
1,8
2,6
2,7
2,8
3,6
3,7
3,8

con un indice sobre Campo1,Campo2

¿Como puedo hacer un query que me de el rango de 1,8 a 3,6?, osea:
1,8
2,6
2,7
2,8
3,6
y que ademas este optimizado para usar el indice?

SELECT * FROM Tabla WHERE CampoA BETWEEN 1 and 3 AND CampoB BETWEEN 'c'


AND
'a'

no funciona

SELECT * FROM Tabla WHERE ((CampoA*100)+CampoB) BETWEEN 108 AND 306

si funciona, pero hace un Scan, no un Seek.

Segun yo, deberia ser algo asi:

SELECT * FROM Tabla WHERE CampoA,CampoB BETWEEN 1,8 AND 3,6

pero esta sintaxis no existe.

Gracias de antemano por cualquier idea o comentario.

Carlos Gutiérrez


Gracias de


Preguntas similares