我正在尝试在案例陈述中加入where子句

时间:2019-02-11 17:31:46

标签: mysql sql

我有一个调查表中的数据表,如下所示。我希望它的范围不是1-5,而我希望范围是5-1,但仅针对特定的问题ID。

我尝试过

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 :(得分:0)

您可以在条件和条件时使用  您可以在条件和条件时使用

    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

答案 1 :(得分:0)

CASE表达式可以嵌套。 (CASE表达式是 expression ,不是 statement 。CASE表达式几乎可以出现在任何可以出现的任何地方。

看起来不像SQL的“ where子句”与所问的问题有关。 CASE表达式的语法包括WHEN作为关键字,而不是WHERE。

看起来我们想返回一列,但是当question_id为24时使用一个不同表达式。我们可以在SELECT列表中使用CASE表达式来做到这一点:

 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 ...