在条件 IN 子句中使用 CASE
Using CASE inside conditional IN clause
我有失败的陈述:
select
value_1, value_2
from
zt_Report
where
Division_CD in CASE WHEN @Division ='(ALL EPCD)' THEN ('Epoxy', 'MDP', 'OTG', 'PSR') ELSE @Division END
and [Business_CD] like CASE WHEN @Business='(All)' THEN '%' ELSE @Business END
and [Plant_TX] like CASE WHEN @Plant='(All)' THEN '%' ELSE @Plant+'%' END
获取线路错误:
Where Division_CD in CASE WHEN @Division ='(ALL EPCD)' THEN ('Epoxy', 'MDP', 'OTG', 'PSR') ELSE @Division END
本质上需要发生的是当传递除法参数 (ALL EPCD)
时,WHERE
子句将只允许除法 'Epoxy', 'MDP', 'OTG', 'PSR'
,否则它应该精确地过滤那个除法, IE。将 Epoxy
传递给 Division 会将 WHERE
设置为仅定位 Epoxy
division
那不是 case
的工作方式。它 returns 是一个标量值,而不是列表。所以,你想做这样的事情:
Where (@Division = '(ALL EPCD)' and Division_CD IN ('Epoxy', 'MDP', 'OTG', 'PSR') or
Division_CD = @Division
) and
(@Business = '(All)' or Business_CD = @Business) and
(@Plant = '(All)' or Plant_TX like @Plant + '%')
您的逻辑以非常奇怪(且不兼容)的方式混合了等式 like
和 case
。
我有失败的陈述:
select
value_1, value_2
from
zt_Report
where
Division_CD in CASE WHEN @Division ='(ALL EPCD)' THEN ('Epoxy', 'MDP', 'OTG', 'PSR') ELSE @Division END
and [Business_CD] like CASE WHEN @Business='(All)' THEN '%' ELSE @Business END
and [Plant_TX] like CASE WHEN @Plant='(All)' THEN '%' ELSE @Plant+'%' END
获取线路错误:
Where Division_CD in CASE WHEN @Division ='(ALL EPCD)' THEN ('Epoxy', 'MDP', 'OTG', 'PSR') ELSE @Division END
本质上需要发生的是当传递除法参数 (ALL EPCD)
时,WHERE
子句将只允许除法 'Epoxy', 'MDP', 'OTG', 'PSR'
,否则它应该精确地过滤那个除法, IE。将 Epoxy
传递给 Division 会将 WHERE
设置为仅定位 Epoxy
division
那不是 case
的工作方式。它 returns 是一个标量值,而不是列表。所以,你想做这样的事情:
Where (@Division = '(ALL EPCD)' and Division_CD IN ('Epoxy', 'MDP', 'OTG', 'PSR') or
Division_CD = @Division
) and
(@Business = '(All)' or Business_CD = @Business) and
(@Plant = '(All)' or Plant_TX like @Plant + '%')
您的逻辑以非常奇怪(且不兼容)的方式混合了等式 like
和 case
。