Я бы сделал это с простым OR
, а не CASE
выражением в WHERE
.
В общем, вы хотите избегать выражений CASE
в предложении WHERE
по нескольким причинам:
- Логика может быть написана почти лаконично с использованием базовых логических операций.
- Добавление дополнительных конструкций (в дополнение к
AND
, OR
и NOT
) только усложняет логику для людей.
- Это в значительной степени убивает любые пути оптимизации.
Я бы предложил:
with table1 as
select v.*
from (values ('dept1', 'user1'),
('dept2', 'user2'),
('dept3', 'user3'),
('dept4', 'user4')
) v([department], [user])
)
select t1.*
from table1 t1
where t1.[user] = @id or
not exists (select 1 from table1 t1 where t1.user = @id);