SQL case语句在where子句中指定条件?

use*_*432 3 sql t-sql sql-server case

我有以下查询:

    SELECT * 
FROM dbo.tblOrders o
WHERE o.OrderId IN (SELECT [Value] FROM [dbo].[udf_GenerateVarcharTableFromStringList](@OrderId, ','))
AND
@ActiveInactive =
CASE 
WHEN 'Active' THEN (o.[orderactivedate] > o.[orderinactivedate])
WHEN 'Inactive' THEN (o.[orderactivedate] < o.[orderinactivedate]) 
END
Run Code Online (Sandbox Code Playgroud)

这回来了

An expression of non-boolean type specified in a context where a condition is expected, near 'THEN'.
Run Code Online (Sandbox Code Playgroud)

我怎么能让这个工作?如果参数为"活动",则返回具有以下条件的记录?

Dus*_*ine 7

你可以用另一种方式做到这一点:

SELECT * 
FROM dbo.tblOrders o
WHERE o.OrderId IN (SELECT [Value] FROM [dbo].[udf_GenerateVarcharTableFromStringList](@OrderId, ','))
AND ((@ActiveInactive = 'Active' AND o.[orderactivedate] > o.[orderinactivedate])
OR   (@ActiveInactive = 'Inactive' AND o.[orderactivedate] < o.[orderinactivedate]))
Run Code Online (Sandbox Code Playgroud)