sql >> Base de Datos >  >> RDS >> Sqlserver

TSQL para filtrar la experiencia del rango de selección múltiple

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.

NOTA:
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