我试图将列“得分”从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
答案 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的倍数。