Where 子句中的条件基于标志

use*_*134 5 sql t-sql

我可以使用标志来选择不同的 WHERE 子句吗?像这样的东西。

SELECT  fields
 from T3 t3 
left outer join T1 t1 on T1.Id=t2.Id
WHERE 
    CASE 
        WHEN @Status <> 1 
        THEN (t3.Id = @SId AND sh.StatusId = 3 AND k.StatusId = 1)
        ELSE t2.Id = @SID AND  t2.StatusID = 12
GROUP BY whatever
Run Code Online (Sandbox Code Playgroud)

JBr*_*oks 3

首选方式:

    WHERE
    (@Status <> 1 AND t3.Id = @SId AND sh.StatusId = 3 AND k.StatusId = 1)
    OR (t2.Id = @SID AND t2.StatusID = 12)
Run Code Online (Sandbox Code Playgroud)

或者这是更容易阅读的 case 语句:

WHERE
CASE WHEN @Status <> 1 
       AND t3.Id = @SId 
       AND sh.StatusId = 3 
       AND k.StatusId = 1 THEN 1
WHEN t2.Id = @SID 
       AND t2.StatusID = 12 THEN 1
ELSE 0 END = 1
Run Code Online (Sandbox Code Playgroud)