如何同时使用SQL WHERE CASE与NOT IN或equals?

War*_*ren 6 sql t-sql sql-server case-when in-operator

大家好(我在堆栈上的第一篇文章!),

这有效:

where
    Tran_date between @FromDate and @ToDate

and Range = @Range

and Store_ID =
    case when @Range = 'RangeName' then
        1234
    else
        Store_ID
    end
Run Code Online (Sandbox Code Playgroud)

但我怎么能做到这一点?:

where
    Tran_date between @FromDate and @ToDate

and Range = @Range

and Store_ID 
    case when @Range = 'RangeName' then
        not in (1234, 5678)
    else
        Store_ID
    end
Run Code Online (Sandbox Code Playgroud)

Ken*_*her 5

where
    Tran_date between @FromDate and @ToDate

and Range = @Range

and Store_ID 
    case when @Range = 'RangeName' AND Store_Id in (1234, 5678)
        9999 -- Assumes 9999 is a non possible value.  
             -- If it is possible then pick one that isn't.
    else
        Store_ID
    end
Run Code Online (Sandbox Code Playgroud)


Gil*_*ilM 2

我想你想要:

AND NOT (@Range = 'RangeName' AND Store_ID IN (1234,5678))
Run Code Online (Sandbox Code Playgroud)