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 に答える