Я пытаюсь поместить предложение where в заявление case - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть таблица данных из анкеты, которая выглядит следующим образом.Вместо того, чтобы иметь диапазон от 1 до 5, я хочу, чтобы он варьировался от 5 до 1, но только для конкретного идентификатора вопроса.

Я пытался

where question_id = 24
case
  when value = 1 then '5'
  when value = 2 then '4'
  when value = 4 then '2'
  when value = 5 then '1'
end

        id  id_external text               value    question_id
1       42  10          Strongly Agree     1            24
2       43  11          Agree              2            24
3       44  12          Neutral            3            24
4       45  13          Disagree           4            24
5       46  14          Strongly Disagree  5            24
6       47  15          I Don't Know       999          24

Я хочу, чтобы таблица показывалакак:

        id  id_external text               value    question_id
1       42  10          Strongly Agree     5            24
2       43  11          Agree              4            24
3       44  12          Neutral            3            24
4       45  13          Disagree           2            24
5       46  14          Strongly Disagree  1            24
6       47  15          I Don't Know       999          24

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

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 ...
0 голосов
/ 11 февраля 2019

вы можете использовать при условии и состоянии вы можете использовать при условии и условии

    case when question_id = 24  AND value = 1 then '5' 
          when question_id = 24 AND value = 2 then '4' 
          when question_id = 24 AND value = 4 then '2' 
          when question_id = 24 AND value = 5 then '1'  
          when question_id <> 24 AND value = 1 then '1' 
          when question_id <> 24 AND value = 2 then '2' 
          when question_id  <> 24 AND value = 4 then '4' 
          when question_id <> 24 AND value = 5 then '5'  
          when  value = 3 then '3'
    end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...