Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

TSQL For Filter Experice From Range множествен избор

Първо се нуждаете от таблица 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)

Вижте как checkID са степен на 2?

Във вашето приложение, ако потребителят избере 3-6 и 9-12 изпращате 2+8 = 10 към вашия db. Също така би било чудесно, ако създадете своето поле за отметка, като използвате информацията за db.

Във вашата база данни правите побитово сравняване, за да изберете правилните диапазони. След това извършете между тях с всеки диапазон.

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

Вижте всичко заедно Демонстрация на SQL Fiddle Включвам още потребители. Трябва само да промените клаузата where checkID & 10 > 0 за да тествате друга комбинация.

ЗАБЕЛЕЖКА:
Актуализирам диапазоните. Променете горната стойност на value - 1 защото between включва и може да даде дублиращи се резултати.

Ако искате да използвате старата версия, трябва да смените betwewen в съединителното изречение към

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. Грешка при аритметично препълване при преобразуване на израза в тип данни дата и час. (докато показва дата и час..)

  2. T-SQL:Как да използвам параметри в динамичен SQL?

  3. Как нулирате паролата на SA?

  4. Какво SqlDbType се съпоставя с varBinary(max)?

  5. Премахнете SCHEMABINDING от дефинирана от потребителя функция в SQL Server