如何在CASE语句中使用while循环?

时间:2015-06-28 02:24:12

标签: sql for-loop while-loop case

我试图将列“得分”从10分为210,间隔为20.我的当前代码在下面,它实际上是为每个分数分配一个范围。但有没有办法使用while循环与CASE语句来简化查询?

SELECT CASE
           WHEN score <= 10 THEN '10'
           WHEN score BETWEEN 11 AND 30 THEN '11-30'
           WHEN score BETWEEN 31 AND 50 THEN '31-50'
           ...
           WHEN score BETWEEN 191 AND 210 THEN '191-210'
END AS Score_range

1 个答案:

答案 0 :(得分:1)

假设score是一个整数,你可以使用一些数学来简化你的CASE语句:

SELECT CASE
    WHEN score <= 10 THEN '10'
    ELSE
        CONVERT(varchar, (score + 9) / 20 * 20 - 9) +
        '-' +
        CONVERT(varchar, (score + 9) / 20 * 20 + 10)
END AS Score_range

以下是公式如何为score的选择值:

score  (score + 9)  (score + 9)/20 * 20  (score + 9)/20 * 20 - 9  (score + 9)/20 * 20 + 10
-----  -----------  -------------------  -----------------------  ------------------------
  11        20               20                      11                      30
  12        21               20                      11                      30
 ...       ...              ...                     ...                     ...
  29        38               20                      11                      30
  30        39               20                      11                      30
  31        40               40                      31                      50
  32        41               40                      31                      50
 ...       ...              ...                     ...                     ...
 209       218              200                     191                     210
 210       219              200                     191                     210

请注意,(score + 9) / 20 * 20(score + 9)向下舍入到最接近的20的倍数。