Вы можете сделать что-то вроде этого:
select *
from CTE4
where @param_policy in ('1', '2', '3', '4') and
mid not in (select distinct mid from CTE6) and
[CN] = @param_policy;
IF
- поток управления для кода T-SQL.Он не является частью SELECT
синтаксиса запроса.
В более общем смысле вы можете делать то, что хотите, с помощью union all
:
select *
from CTE4
where @param_policy in ('1', '2', '3', '4') and
mid not in (select distinct mid from CTE6) and
[CN] = @param_policy
union all
select *
from CTE4
where @param_policy = 'batch' and
mid not in (select distinct mid from CTE6) and
not (([Client Number] ='5' and Pnum = 'IN' ) or
([Client Number] ='6' and Pnum = 'G') or
([Client Number] in ('7' , '8', '9')
);
Вы также можете добавить эти условия в один запрос, но я думаю, что union all
- это более общий подход, который вы ищете.
РЕДАКТИРОВАТЬ:
Или просто использовать более сложную логику в WHERE
:
select *
from CTE4
where mid not in (select distinct mid from CTE6) and
( (@param_policy in ('1', '2', '3', '4') and
[CN] = @param_policy
) or
(@param_policy = 'batch' and
not (([Client Number] ='5' and Pnum = 'IN' ) or
([Client Number] ='6' and Pnum = 'G') or
([Client Number] in ('7' , '8', '9')
)
)
)