在 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'
我想 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'