use*_*916 3 t-sql sql-server sql-server-2005
我在这里靠着墙撞着我的脑袋......无法想出办法把它拉下来.
这是我的设置:
我的表中有一个列完成日期.如果它从未完成,则该字段为空.很简单.
在前端,我有一个默认为"仅显示不完整的条目"的复选框.当只提取不完整的条目时,这很容易.
SELECT
*
FROM Sometable
WHERE Completed_Date IS NULL
Run Code Online (Sandbox Code Playgroud)
但是提供复选框选项会使事情变得复杂.我的复选框输入一个位值:1 =仅显示不完整,0 =显示全部.
问题是,我不能在where子句中使用CASE语句,因为实际值使用"="进行比较,而检查null使用"IS".例如:
SELECT
*
FROM Sometable
WHERE Completed_Date IS <---- invalid syntax
CASE WHEN
...
END
SELECT
*
FROM Sometable
WHERE Completed_Date =
CASE WHEN @OnlyIncomplete = 1 THEN
NULL <----- this translates to "WHERE Completed_Date = NULL", which won't work.. I have to use "IS NULL"
...
END
Run Code Online (Sandbox Code Playgroud)
知道如何完成这个看似简单的任务吗?我很难过...谢谢.
...
WHERE @OnlyIncomplete = 0
OR (@OnlyIncomplete = 1 AND Completed_Date IS NULL)
Run Code Online (Sandbox Code Playgroud)