0

考虑以下简单的 MySQL 表:

| Answer           |
| ---------------- |
| Extremely likely |
| Likely           |
| Likely           |
| Not a chance     |
| Likely           |
| Potato           |
| Unlikely         |

我想从这个表中写一个查询 SELECT,它将任何出现的“极有可能”替换为 1,“可能”替换为 2,“不太可能”替换为 3,“没有机会”替换为 4。

不应转换所有其他答案。

所以结果是:

| Answer |
| ------ |
| 1      |
| 2      |
| 2      |
| 4      |
| 2      |
| Potato |
| 3      |

这可以单独使用 SQL 完成吗?


在回答了这个问题后,我意识到我也只需要在另一个字段具有特定值时才这样做。这是一张这样的表:

| QuestionID | Answer           |
| ---------- | ---------------- |
| how_likely | Extremely likely |
| how_likely | Likely           |
| how_likely | Likely           |
| fave_veg   | Potato           |

我成功用于此的查询是:

SELECT QuestionID,
    IF(
        QuestionID = 'how_likely',
        CASE Answer
            WHEN 'Extremely likely' THEN 1
            WHEN 'Likely'           THEN 2
            WHEN 'Unlikely'         THEN 3
            WHEN 'Not a chance'     THEN 4
        END,
        Answer
    ) AS Answer
FROM `answers`
4

2 回答 2

4
SELECT CASE answer
         WHEN 'Extremely Likely' THEN 1
         WHEN 'Likely'           THEN 2
         WHEN 'Unlikely'         THEN 3
         WHEN 'Not a chance'     THEN 4
         ELSE answer
       END As new_answer
FROM   your_table

编辑:如果您有很多[动态] 替换要做,那么您可能会发现这种方法太麻烦而无法维护。在这些情况下,您应该创建一个查找表,您可以执行以下OUTER JOIN操作:

SELECT Coalesce(lookup_values.new_answer, your_table.answer) As new_answer
FROM   your_table
 LEFT
  JOIN lookup_values
    ON lookup_values.answer = your_table.answer
于 2013-08-05T13:03:08.520 回答
0
REPLACE(REPLACE(REPLACE(REPLACE(Answer, 'Extremely likely', '1') , 'Likely', '2') , 'Unlikely', '3') , 'Not a chance', '4')
于 2013-08-05T13:03:37.657 回答