如何在SQL Server上的CASE中使用"IN"?

Viv*_*vek 3 sql sql-server

我想完成以下内容 case when

If @chk='Y'  
    Select * From Table1 Where Column1=@Value  
Else If (@chk='N')
    Select * From Table1 Where Column1 In (Select column2 from Table2)
Run Code Online (Sandbox Code Playgroud)

我想它可能是这样的:

 Select * 
 From Table1 
 Where 
    Case  When @chk='Y' Then
        Column1=@Value
    Else
        Column1 In (Select column2 from Table2)
 End
Run Code Online (Sandbox Code Playgroud)

我知道除了之外还有其他解决方案Case When.但是可以使用Case when吗?

Aar*_*and 6

CASE是一个返回单个值的表达式.它不用于控制流量.

WHERE (Column1 = @Value AND @chk = 'Y')
OR (@chk <> 'Y' AND Column1 IN (SELECT column2 FROM table2));
Run Code Online (Sandbox Code Playgroud)


JNK*_*JNK 5

CASE用于表达式的内联求值。它并不真正适用于动态WHERE子句。

您所要求的解决方案是使用WHERE由括号分组的子句:

 Select * From Table1 
 Where 
 (@chk='Y' AND Column1=@Value)
 OR
 (@chk <> 'Y' AND Column1 In (Select column2 from Table2))
Run Code Online (Sandbox Code Playgroud)