SQL-запрос для фильтрации, где значение равно @param, если @param не является другим - PullRequest
0 голосов
/ 27 июня 2019

У меня есть раскрывающийся список фильтров со следующими параметрами:

1, 2, 3, 4, 5, Другое

Когда пользователь выбирает опцию, я запускаю простой запрос SQL, чтобы отфильтровать данные по этому значению, например:

SELECT * FROM Product WHERE Code = @Code

Единственная проблема заключается в том, что при выборе опции «Другое» мне нужно показать все, что не имеет кода 1,2,3,4 или 5.

Данные выглядят следующим образом:

Id: 1, Name: Product 1, Code: 1
Id: 2, Name: Product 2, Code: 2
Id: 3, Name: Product 3, Code: null
Id: 4, Name: Product 4, Code: 3
Id: 5, Name: Product 5, Code: 12

Если пользователь выбирает Другое, мне нужно только отобразить: Продукт 3 и Продукт 5

Ответы [ 2 ]

2 голосов
/ 27 июня 2019

Простое OR условие должно выполнить это

SELECT *
FROM Product
WHERE (Code = @Code) OR (@Code = 'Other' and Code not in (1,2,3,4,5))
0 голосов
/ 27 июня 2019

Это то, что вы хотите?

SELECT *
FROM Product
WHERE (Code = @Code AND @Code IN ('1', '2', '3', '4', '5')) OR
      (Code NOT IN ('1', '2', '3', '4', '5') AND @Code = 'Other')

Если Code является целым числом, то приведенное выше может вернуть ошибку преобразования типа.В этом случае я бы порекомендовал:

WHERE Code = TRY_CONVERT(INT, @Code) OR
      (Code NOT IN (1, 2, 3, 4, 5) AND @Code = 'Other')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...