在 where 子句的 case 语句中使用子查询

Using a subquery in a case statement in a where clause

我想 select 根据在查询中设置的特定参数的不同结果(来自临时 table)。如果某个仓库是 selected,我想排除某些库存 SKU。不幸的是,我收到了这个错误。

消息 512,级别 16,状态 1,第 310 行 子查询返回了 1 个以上的值。当子查询跟在 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。

这是一个简化的温度 table 例如,我 select 来自...

InvtID
C-123
C-789
C-20042
12345
56789
35353
declare @siteid VARCHAR(10) = 'CF'

select *
from #temptable
where InvtID in (Case when @siteid='CF' then (
                                                select I.InvtID
                                                from dbo.Inventory I
                                                where I.InvtID not like 'C-%'
                                                union all
                                                select 'C-20042')
                        else (select I.InvtID from dbo.Inventory I) end)

预期结果

InvtID
C-20042
12345
56789
35353

有没有更好的方法来完成我的任务,或者有没有办法修复我当前尝试的解决方案?

select *
from #temptable FT
where (@siteid='CF' and (FT.InvtID not like 'C-%' or FT.InvtID='C-20042'))
or @siteid<>'CF'