2013-07-29 116 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

相關問題