РЕДАКТИРОВАТЬ: далее упрощено, исправлено
Нет плавающей запятой и работал на каждой базе данных, к которой у меня есть доступ:
create table calls (t1 int, t2 int, rct int, cd int)
insert into calls (t1, t2, rct, cd)
values (60, 10, 48, 60)
insert into calls (t1, t2, rct, cd)
values (60, 10, 65, 70)
insert into calls (t1, t2, rct, cd)
values (60, 10, 121, 130)
insert into calls (t1, t2, rct, cd)
values (30, 20, 25, 30)
insert into calls (t1, t2, rct, cd)
values (30, 20, 35, 50)
insert into calls (t1, t2, rct, cd)
values (30, 20, 65, 70)
--Additional test to show that it works
insert into calls (t1, t2, rct, cd)
values (60, 10, 70, 70)
select t1, t2, rct, cd,
t1 + case when rct <= t1
then 0
else ( (rct-1-t1) / t2 + 1) * t2 end as CalceCD
from calls
Результат:
t1 t2 rct cd CalceCD
----------- ----------- ----------- ----------- -----------
60 10 48 60 60
60 10 65 70 70
60 10 121 130 130
30 20 25 30 30
30 20 35 50 50
30 20 65 70 70
60 10 70 70 70
(6 row(s) affected)
Вы можете свободно создавать функцию как UDF или что-либо другое, что ваша среда SQL позволяет очистить.
Редактировать: да, пол и смещение в единицу избегают плавающей математики.