Primero necesitas una tabla checkRanges
CREATE TABLE checkRanges
([checkID] int, [name] varchar(8), [low] int, [upper] int);
INSERT INTO checkRanges
([checkID], [name], [low], [upper])
VALUES
(1, '0-3', 0, 2),
(2, '3-6', 3, 5),
(4, '6-9', 6, 8),
(8, '9-12', 9, 11),
(16, '12+', 12, 999)
Vea cómo checkID
son potencia de 2?
En su aplicación, si el usuario selecciona 3-6
y 9-12
envías 2+8 = 10
a su base de datos. También sería genial si creas tu casilla de verificación usando la información de la base de datos.
En su base de datos, realiza una comparación bit a bit para seleccionar los rangos correctos. Luego, realice el intervalo con cada rango.
WITH ranges as (
SELECT *
FROM checkRanges
where checkID & 10 > 0
)
SELECT *
FROM users u
inner join ranges r
on u.Experience between r.low and r.upper
Véalo todo junto Demostración de SQL Fiddle
Incluyo más usuarios. Solo tienes que cambiar la clausula where checkID & 10 > 0
para probar otra combinación.
Actualizo los rangos. Cambie el valor superior a value - 1
porque between
es inclusivo y podría dar resultados duplicados.
Si desea usar la versión anterior, debe reemplazar el betwewen
en la oración de unión a
u.Experience >= r.low and u.Experience *<* r.upper