Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

TSQL For Filter Experience From Range multiselect

Per prima cosa hai bisogno di una tabella 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)

Guarda come checkID sono potenza di 2?

Nella tua app se l'utente seleziona 3-6 e 9-12 invii 2+8 = 10 al tuo db. Sarebbe anche fantastico se crei la tua casella di controllo usando le informazioni db.

Nel tuo db fai il confronto bit per bit per selezionare gli intervalli giusti. Quindi esegui il mezzo con ogni intervallo.

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

Guarda tutto insieme Demo SQL Fiddle Includo più utenti. Devi solo cambiare la clausola where checkID & 10 > 0 per testare un'altra combinazione.

NOTA:
Aggiorno gli intervalli. Cambia il valore superiore in value - 1 perché between è inclusivo e potrebbe fornire risultati duplicati.

Se vuoi usare la vecchia versione devi sostituire il between nella frase unisci a

u.Experience >= r.low and u.Experience *<* r.upper