Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

TSQL para experiência de filtro do intervalo multisseleção


Primeiro você precisa de uma tabela 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)

Veja como checkID são potência de 2?

Em seu aplicativo, se o usuário selecionar 3-6 e 9-12 você envia 2+8 = 10 para o seu banco de dados. Também seria ótimo se você criasse sua caixa de seleção usando as informações do banco de dados.

Em seu banco de dados você faz uma comparação bit a bit para selecionar os intervalos corretos. Em seguida, faça o entre com cada intervalo.
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

Veja tudo junto Demonstração do SQL Fiddle Eu incluo mais usuários. Você só precisa alterar a cláusula where checkID & 10 > 0 para testar outra combinação.

OBSERVAÇÃO:
Eu atualizo os intervalos. Altere o valor superior para value - 1 porque between é inclusivo e pode dar resultados duplicados.

Se quiser usar a versão antiga, você deve substituir o between na frase de junção para
u.Experience >= r.low and u.Experience *<* r.upper