SQL查询过滤值等于@param的地方,除非@param是其他值

时间:2019-06-27 02:48:03

标签: sql sql-server

我有一个过滤器下拉列表,其中有以下选项:

  

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 个答案:

答案 0 :(得分:2)

一个简单的OR条件就可以做到

SELECT *
FROM Product
WHERE (Code = @Code) OR (@Code = 'Other' and Code not in (1,2,3,4,5))

答案 1 :(得分:0)

这是您想要的吗?

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')