Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

TSQL für Filtererfahrung aus Bereichs-Multiselect

Zuerst brauchen Sie eine Tabelle 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)

Sehen Sie, wie checkID sind Potenzen von 2?

Wenn der Benutzer in Ihrer App 3-6 auswählt und 9-12 Sie senden 2+8 = 10 zu deiner db. Es wäre auch toll, wenn Sie Ihr Kontrollkästchen mit den DB-Informationen erstellen.

In Ihrer db führen Sie einen bitweisen Vergleich durch, um die richtigen Bereiche auszuwählen. Führen Sie dann mit jedem Bereich das Zwischen durch.

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

Sehen Sie alles zusammen SQL Fiddle Demo Ich schließe mehr Benutzer ein. Sie müssen nur die Klausel where checkID & 10 > 0 ändern andere Kombination zu testen.

HINWEIS:
Ich aktualisiere die Bereiche. Ändern Sie den oberen Wert in value - 1 weil between ist inklusive und könnte doppelte Ergebnisse liefern.

Wenn Sie die alte Version verwenden möchten, müssen Sie den between ersetzen im Join-Satz zu

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