我有一个asp.net应用程序。所需的功能是:
下面有1个下拉列表和一个gridview。首次加载页面时,下拉列表中未选择任何内容。查询的工作方式如下:
Select * from myTable;
然后,当我们从下拉列表中选择某些内容时,查询为:
Select * from myTable where Col1 = @valueSelected
我想对这两种情况使用单一查询,即
SELECT * FROM myTable
Where
Case @valueSelected WHEN NULL THEN Col1 IN ('ALL', 'PASSED', 'FAILED') ELSE Col1 = @valueSelected END
或
SELECT * FROM myTable
Where
Case @valueSelected WHEN NOT NULL THEN Col1 = @valueSelected ELSE NULL END
但两者现在都不起作用。
任何帮助/建议/指针?
答案 0 :(得分:2)
用于在If else condition
子句中使用Case statement
模拟where
的语法用法是错误的。
如果您需要来自Col1的特定值列表,请尝试此操作。
SELECT *
FROM myTable
WHERE ( Col1 IN ( 'ALL', 'PASSED', 'FAILED' )
AND @valueSelected IS NULL )
OR col1 = @valueSelected
如果您希望获得col1
中的所有值,请尝试此操作。
Select * from myTable where Col1 = coalesce(@valueSelected,Col1)
答案 1 :(得分:1)
试试这个。
从myTable中选择*,其中Col1 = ISNULL(@ valueSelected,Col1)