Циклирование и приращение SQL

#sql-server #sql-server-2008 #loops

#sql-сервер #sql-server-2008 #циклы

Вопрос:

Я использую SQL server 2008

У меня есть следующий SQL, получающий все даты между сегодняшним днем и 31 декабря 2012 года. Что мне теперь нужно сделать, так это начать со значения 10000 и увеличить это значение в равной степени, чтобы 31 декабря у меня было значение 150000.

 Declare @projection table(d datetime, t decimal)
Declare @d datetime
Declare @t decimal(18, 2)

set @d='20110527'
set @t=100000

While @d<='20121231'
Begin
Insert into @projection values (@d, @t)
set @d=@d 1
End
Select d as DateCol, t as TotalRevenue from @projection
  

Любая помощь приветствуется

Ответ №1:

Это линейно интерполирует t от 10000 до 150000.

 Declare @projection table(d datetime, t decimal)
Declare @d datetime, @d1 datetime, @d2 datetime
Declare @t decimal(18,4), @t1 decimal(18, 4), @t2 decimal(18,4), @tincr decimal(18,4)

set @d1='20110527'
set @d2='20121231'
set @t1=10000
set @t2=150000

Set @tincr = (@t2-@t1)/DATEDIFF(D, @d1, @d2)

Set @d = @d1
set @t = @t1

While @d<=@d2
Begin
Insert into @projection values (@d, @t)
set @d=@d 1
Set @t=@t @tincr
End
Select d as DateCol, t as TotalRevenue from @projection
  

Обратите внимание, что я увеличил десятичную точность до 4, чтобы ошибки округления были незначительными.

Комментарии:

1. Это здорово, спасибо за быстрый ответ. Однако мое окончательное значение теперь равно 150002. Но оно должно быть 150000.

2. Измените decimal(18,2) на decimal(18,4) , чтобы устранить ошибку округления.