Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 表中列的累计拆分因子_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql 表中列的累计拆分因子

Sql 表中列的累计拆分因子,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一张这样的桌子: A B 1.2902 5.356 1.2 5.356 1.3 5.356 1.4 5.356 1.2 5.356 1.2 5.356 1.2 5.356 1.1 5.356 我希望得到如下值: A B 1.2902 5.356 1.2 4.151294373 1.3

我有一张这样的桌子:

  A           B
1.2902      5.356
1.2         5.356
1.3         5.356
1.4         5.356
1.2         5.356
1.2         5.356
1.2         5.356
1.1         5.356
我希望得到如下值:

A             B
1.2902      5.356
1.2         4.151294373
1.3         3.193303364
1.4         2.280930974
1.2         1.900775812
1.2         1.583979843
1.2         1.319983203
1.1         1.19998473
解释:

If
A1 = 1.2902    & B1=5.356
A2=1.2      then B2 should be B1/A1 
A3=1.3      then B3 should be B2/A2
A4=1.2      then B4 should be B3/A3
A5=1.2      then B5 should be B4/A4
A6=1.2      then B6 should be B5/A5
A7=1.1      then B7 should be B6/A6

非常感谢你的帮助

如果表中有主键,并且数据是按主键的顺序排列的(即没有任何丢失的记录),则可以使用递归CTE进行操作,如下所示

;with CTE as
(
   SELECT  Id,A,B FROM Test t1 WHERE Id = 1

   UNION ALL

   SELECT  t1.Id, t1.A, CAST(CTE.B/CTE.A AS decimal(18,10)) AS B
   FROM Test t1
   INNER JOIN CTE ON t1.Id - 1 = CTE.Id
)

SELECT * FROM CTE

请指定所有行的计算。。。解释有点混乱。停止尝试将SQL用作电子表格。表或行集可能与电子表格有些相似之处,但它们实际上是非常不同的工具。