Оператор case должен приводить к значению, а не к выражению.Так что это не сработает:
select case when 1=1 then 1 in (1,2,3) end
Но это сработает;
select case when 1=1 then 1 end
Значение может быть результатом подзапроса.Таким образом, одним из решений было бы переписать предложение where
, например:
CASE @SomePRarmeter
WHEN 'this' THEN
(SELECT count() FROM dbo.func_Id1(@User) f where f.user_id = t.user_id))
WHEN 'that' THEN
(SELECT count() from dbo.func_Ids2(@OrgsForReporter) f where f.user_id = t.user_id))
END > 1
Теперь он возвращает количество совпадающих строк.Затем вы можете фильтровать с помощью case ... end > 1
.