CASE
выражения могут быть вложенными.(Выражение CASE является выражением , это не выражение . Выражение CASE может появляться чаще всего везде, где может появляться любое выражение.
Не похоже на SQL«where clause» имеет какое-либо отношение к задаваемому вопросу. Синтаксис выражения CASE включает WHEN в качестве ключевого слова, а не WHERE.
Похоже, что мы хотим вернуть столбец, но используем другое выражение, когда question_id равно 24. Мы можем использовать выражение CASE для этого в списке SELECT следующим образом:
SELECT t.id
, t.id_external
, t.text
, t.question_id
, t.value AS orig_value
, CASE
WHEN t.question_id = 24
THEN expr1
ELSE expr2
END AS val
FROM ...
Теперь мы можем заменить expr2 ...когда значение question_id отличается от 24, мы можем вернуть t.value
.
А для expr1 мы можем инвертировать 1/5, 2/4, 4/2, 5/1, используявыражение типа
CASE WHEN t.value IN ('1','2','4','5') THEN 6 - t.value ELSE t.value END
Итак, все это вместе, вложенные выражения CASE:
SELECT t.id
, t.id_external
, t.text
, t.question_id
, t.value AS orig_value
, CASE
WHEN t.question_id = 24
THEN CASE
WHEN t.value IN ('1','2','4','5')
THEN 6 - t.value
ELSE t.value
END
ELSE t.value
END AS val
FROM ...