Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

TSQL do obsługi filtrów z zakresu wielokrotnego wyboru

Najpierw potrzebujesz tabeli 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)

Zobacz, jak checkID są potęgi 2?

W aplikacji, jeśli użytkownik wybierze 3-6 i 9-12 wysyłasz 2+8 = 10 do swojej bazy danych. Byłoby również świetnie, jeśli utworzysz pole wyboru za pomocą informacji o bazie danych.

W swojej bazie danych dokonujesz porównań bitowych, aby wybrać właściwe zakresy. Następnie wykonaj pomiędzy z każdym zakresem.

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

Zobacz to wszystko razem Pokaz SQL Fiddle Uwzględniam więcej użytkowników. Musisz tylko zmienić klauzulę where checkID & 10 > 0 aby przetestować inną kombinację.

UWAGA:
Aktualizuję zakresy. Zmień górną wartość na value - 1 ponieważ between jest inkluzywny i może dawać zduplikowane wyniki.

Jeśli chcesz używać starej wersji, musisz zastąpić between w zdaniu dołączającym do

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak odjąć 30 dni od bieżącej daty za pomocą SQL Server

  2. Jak przekonwertować wartość daty/godziny na ciąg w SQL Server za pomocą funkcji CONVERT()

  3. Czy SQL Server może wysłać żądanie internetowe?

  4. Zapytanie o pomoc podczas korzystania z tabeli audytu

  5. Jak znaleźć ustawienie ANSI_NULLS bazy danych w SQL Server (T-SQL)