У меня есть таблица # t1, содержащая три столбца, один из которых называется root_symbol
.
Я хочу выбрать все элементы из таблицы # t1, удовлетворяющие условию переменной @root
.
Однако переменная @root
может иметь четыре различных значения, поэтому я хотел бы динамически выбирать фильтр, применяемый оператором where
, в зависимости от объявленного значения переменной.
declare @root integer
set @root = 1
select * from #t1
where root_symbol in
case when @root = 1 then ('ES')
when @root = 2 then ('EW', 'EW1', 'EW2', 'EW3', 'EW4')
when @root = 3 then ('E1C', 'E2C', 'E3C', 'E4C', 'E5C')
when @root = 4 then ('E1A', 'E2A', 'E3A', 'E4A', 'E5A')
end
Я видел, как это делается с использованием case when
, но не с условием сопоставления значений in
.
Альтернативой может быть создание оператора if с четырьмя различными операторами выбора внутри, однако и здесь я не уверен как работать с несколькими предложениями if в sql.
Есть идеи, как это решить?