sql server选择案例中的位置

sql server选择案例中的位置,sql,case,where,Sql,Case,Where,请提供语法帮助,我只需要在参数=1时才需要where IN子句,否则需要所有记录 不起作用 SELECT * FROM T WHERE T.C = 'AAA' AND CASE WHEN @Param = 1 THEN T.ID IN ('1','2','3') END - this condition only needed when @param = 1 我尝试下面,但如何获得所有记录 AND T.ID IN CASE WHEN @Param = 1 THEN (

请提供语法帮助,我只需要在参数=1时才需要where IN子句,否则需要所有记录

不起作用

SELECT * FROM T 
    WHERE T.C = 'AAA' 
    AND CASE WHEN @Param = 1 THEN T.ID IN ('1','2','3') END - this condition only needed when @param = 1
我尝试下面,但如何获得所有记录

   AND T.ID IN CASE WHEN @Param = 1 THEN ('1','2','3') ELSE -all rows- END
不要使用这个用例

按如下方式重写SQL:

WHERE
    T.C = 'AAA'
AND (
    (@Param = 1 AND T.ID IN ('1', '2', '3'))
    OR
    (@Param <> 1)
    )
如果@Param与1没有区别,那么它必须是1,因此您不需要在另一个分支中显式地检查它

因此,最好的方法是:

WHERE
    T.C = 'AAA'
AND (@Param <> 1 OR T.ID IN ('1', '2', '3'))
不要使用这个用例

按如下方式重写SQL:

WHERE
    T.C = 'AAA'
AND (
    (@Param = 1 AND T.ID IN ('1', '2', '3'))
    OR
    (@Param <> 1)
    )
如果@Param与1没有区别,那么它必须是1,因此您不需要在另一个分支中显式地检查它

因此,最好的方法是:

WHERE
    T.C = 'AAA'
AND (@Param <> 1 OR T.ID IN ('1', '2', '3'))

我不知道为什么人们会立即尝试使用SQL中的用例来实现这一点。1,2,3或@Param 1中的@Param=1和T.ID有什么问题?或者,如果@Param只能接受两个值,比如0或1,@Param=0或1,2,3中的T.ID?我不知道为什么人们会立即尝试在SQL中使用CASE来实现这一点。1,2,3或@Param 1中的@Param=1和T.ID有什么问题?或者,如果@Param只能接受两个值,比如0或1,@Param=0或1,2,3中的T.ID有什么问题?