Если нужно ограничить выборку по вычисляемой колонке case, а разбирать смысл ее лень (или вы в процессе отладки это делаете), то нужно взять этот кейс, перетащить в where и проверить на is not null. Все, что в условия кейса попадает - будет строковым значением (нужно глазками посмотреть, чтобы в кейсе не было исходов с null), а все что не попадает в его условия - обратится в null (если явно не прописан else).
SELECT id,
CASE
WHEN price > 10000 AND price < 11000 THEN 'Economy'
WHEN price >= 20000 AND price <= 30000 THEN 'PremiumEconomy'
WHEN price > 100000 THEN 'Business'
END as service_class, price
FROM tickets
where CASE
WHEN price > 10000 AND price < 11000 THEN 'Economy'
WHEN price >= 20000 AND price <= 30000 THEN 'PremiumEconomy'
WHEN price > 100000 THEN 'Business'
END is not null
А если делать по уму, конечно, кейс оставлять в where - это крайняя мера. Его быть не должно, это ухудшит показатели плана выполнения запроса (не всегда). Нужно вытаскивать булеву конструкцию, желательно, логически упрощенную.
SELECT id,
CASE
WHEN price > 10000 AND price < 11000 THEN 'Economy'
WHEN price >= 20000 AND price <= 30000 THEN 'PremiumEconomy'
WHEN price > 100000 THEN 'Business'
END as service_class, price
FROM tickets
where (price > 10000 AND price < 11000) -- 'Economy'
or (price >= 20000 AND price <= 30000) -- 'PremiumEconomy'
or (price > 100000) -- 'Business'
PS: Конечно, странные у вас кусочные интервалы между классами обслуживания. Скажем, показатель в 12000 выпадет из любого класса. Обычно, их делают перекрывающими диапазонами. Ну, да ладно, тем интересней для вас разбирать запрос.