10

これは私のテーブルデータです:

id | days
-----------
1  | 10
2  | 20
3  | 30
4  | 25
5  | 5

私はこのような結果が欲しい:

id  days    resultcolumn
1    10     less than 10
2    20     less than 20
3    30     less than 30
4    25     less than 30
5    5      less than 10

次のクエリを使用しました。

SELECT id,days,
  CASE days 
    WHEN days<=10 THEN 'less than 10'
    WHEN days<=20 THEN 'less than 20'
    WHEN days<=30 THEN 'less than 30'
  END AS 'days2'
FROM calender

しかし、次のような結果データが得られました。

id  days    resultcolumn
1    10       {null}
2    20       {null}
3    30       {null}
4    25       {null}
5    5        {null}

CASEMySQL のステートメントで元の結果を取得するにはどうすればよいですか?

4

4 に答える 4

11

これを試して:

SELECT
      id,
      days,
      CASE WHEN days<=10 THEN 'less than 10'
           WHEN days<=20 THEN 'less than 20'
           WHEN days<=30 THEN 'less than 30' END AS 'days2'
    FROM calender
于 2013-01-01T15:11:03.127 に答える
3

CASE ... WHEN構築しなくてもできます。簡単な数学を使うだけです。

SELECT *, 
    CONCAT('less than ', CEIL(`days`/10)*10) AS `resultcolumn` 
FROM `Table1`

sqlfiddle

これにより、分岐述語が失敗するのを防ぎます。したがって、大きなデータセットの方が高速になります。

于 2013-01-01T14:35:43.710 に答える
1

これを試して:

SELECT id,days,
  CASE  
      WHEN days<=10 THEN 'less than 10'
      WHEN days<=20 THEN 'less than 20'
      WHEN days<=30 THEN 'less than 30'
  END AS 'resultcolumn'
FROM calender
于 2013-01-01T16:46:07.863 に答える