我有一个调查表中的数据表,如下所示。我希望它的范围不是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
答案 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 / 1CASE 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 ...