Har*_*ari 5 sql sql-server sql-server-2008
正如问题所示,我需要向上或向下舍入到最接近的20,除了0-14之外的数字,所有都必须舍入到20,因为不允许零值.表格不能用新值更新.现在我只管理了向上或向下舍入到最接近的100,如下所示:
CASE WHEN ROUND(number,-2)=0 THEN CAST(ROUND(number,-2)+100 AS DECIMAL(18, 0))
ELSE CAST(ROUND(number,-2) AS DECIMAL(18,0)) END AS [NUMBER]
Run Code Online (Sandbox Code Playgroud)
试试这个:
DECLARE @testValue Int = 35;
SELECT
CASE
WHEN @testValue BETWEEN 0 AND 14 THEN 20
ELSE ROUND((@testValue * 1.0) / 20, 0) * 20
END MyRoundedValue;
Run Code Online (Sandbox Code Playgroud)
可能有更优化的方法,但这是第一个想到的解决方案.的* 1.0是迫使转换为浮点数,使得/ 20会产生分数的结果.结果使用舍入ROUND后再乘以20得到最终的"舍入"值.
编辑考虑你的特殊情况0-14......