2013-07-29 71 views
0

我有一个名为#info该表是这样的:计算SQL Server 2008 R2中未来值的最佳SQL代码?

name  start  delta 
n1   200.0   43.0 
n2  6000.0   87.0 
n3   739.0  129.0 

create table #info (name sysname, startV float, changeV float); 

但我需要创建一个表,从该表#info需要的值,并计算未来值每名在表上方。所以我们有一个初始值和一个数量变化或一个变化量。所以我需要生成一个计算未来日期和未来金额的表格。日期将增加2周,并在未来升至一年。 2013年4月1日,我们开始使用STARTV值并通过更改值增加开始值。所以基本上,输出会看起来像这样:

date  name  amount 
01/04/2013  n1   200 
01/18/2013  n1   243 
02/01/2013  n1   286 
.......  ...   .... 
01/04/2014  n1   673 
01/04/2013  n2   6000  
01/18/2013  n2   6087 
02/01/2013  n2   6174 
.......  ...   .... 
01/04/2014  n2   6957 
01/04/2013  n3   739 
.......  ...   .... 

这里是我想出了迄今为止SQL代码,它只做它的N1值,它没有列出N2或N3的值...我需要改变什么?

DECLARE @dd DATE 
SET @dd = '01/04/2013'; 
SELECT TOP 24 DATEADD(week, 2*rn, @dd) ,* 
    FROM (SELECT rn=(ROW_NUMBER() OVER (ORDER BY name)) -1 
     FROM sys.columns) c cross apply 
(select d.dbname , d.startV+((rn+1)*d.changeV) as mm from #info d) a 

回答

2
;with cte as (
    select convert(date, '20130401', 112) as Date, i.name, i.startV as amount, 1 as num 
    from #info as i 

    union all 

    select dateadd(wk, 2, c.date) as Date, c.name, c.amount + i.changeV, c.num + 1 as num 
    from cte as c 
     inner join #info as i on i.name = c.name 
    where c.num < 24 
) 
select * 
from cte 
order by name asc, date asc 

SQL FIDDLE EXAMPLE

+0

非常感谢你。我很难理解递归CTE。也许这会帮助我理解我的想法......谢谢! – user2573624

相关问题