如何连续添加起始行和下一行的值
Posted
技术标签:
【中文标题】如何连续添加起始行和下一行的值【英文标题】:How to continously add values of starting row and next row to it 【发布时间】:2015-08-27 03:46:46 【问题描述】:我只想创建一个 sql 查询,结果类似于图像。类似于 SQL 中的斐波那契数列。
例如
Column 1: 10 ,则 Result 列的值为 Result: 10 ,因为那是第一行。 ,那么假设column1第2行的值为50,那么Result第2行的值为60..(Result: 60)..以此类推。
示例如下图。
我怎样才能连续做到这一点?任何帮助,将不胜感激。谢谢
【问题讨论】:
***.com/questions/21746100/… @willoller 对此表示感谢,但实际上我正在研究如何在两列“column1 和结果”之间添加值,就像上图一样,不像创建斐波那契数列那么简单。类似于斐波那契的东西,但数字相加是在两列之间。 您要的是累计吗? 搜索“SQL 递归 CTE* 或 递归 SQL 公用表表达式。 @Blorgbeard ,是的,就像总跑一样。你有任何 sql 查询吗?这样我就可以研究代码并在我这边应用逻辑。谢谢 【参考方案1】:如果您使用MSSQL2012
或更高版本,则可以使用OVER
子句。
SELECT t2.id, t2.value, SUM(t2.value) OVER (ORDER BY t2.id) as [Result]
FROM Test01 t2
ORDER BY t2.id;
sql fiddle demo
【讨论】:
非常感谢 Sabyasachi,它有效! :) ,自从我使用 2012 版本以来,我就使用了这个。这使得代码更少,更容易理解。谢谢!【参考方案2】:你可以试试这个
CREATE TABLE #TEST(ID INT,VALUE INT)
INSERT INTO #TEST VALUES
(1,10),(2,20),(3,30),(4,40),(5,50),(6,60),(7,70)
;WITH CTE
as
(
SELECT ID,VALUE,VALUE AS RESULT FROM #TEST WHERE ID=1
UNION ALL
SELECT T.ID,T.VALUE,T.VALUE+C.RESULT
FROM #TEST T INNER JOIN CTE C ON T.ID = C.ID+1
)
SELECT * FROM CTE
【讨论】:
非常感谢..这正是我正在寻找的逻辑,但我只想问一个问题:) 因为我是 CTE 的新手,那是 sql 中的内置函数吗? ,这是我要使用的第一个 :) 谢谢。 CTE 不是关键字或函数。尝试在谷歌上搜索“通用表表达式”。你会看到很多参考。干杯!【参考方案3】:试试这个
select Id, value,
(select sum(t2.value) from TEST01 t2 where t2.id <= t1.id )
as Result
from TEST01 t1
在小提琴http://sqlfiddle.com/#!6/a8f56/2中寻找解决方案
【讨论】:
【参考方案4】:你也可以使用窗口函数。
DECLARE @myTable TABLE(ID INT, val INT);
INSERT INTO @myTable VALUES (1,10),
(2,7),
(3,-4),
(4,1);
SELECT ID,
val,
SUM(val) OVER (ORDER BY ID
ROWS BETWEEN UNBOUNDED PRECEDING
AND CURRENT ROW) AS result
FROM @myTable
ORDER BY ID;
ID val result
-- --- ------
1 10 10
2 7 17
3 -4 13
4 1 14
【讨论】:
以上是关于如何连续添加起始行和下一行的值的主要内容,如果未能解决你的问题,请参考以下文章
仅显示 10 行和 1 页的 JQuery 数据表和按钮被禁用上一个和下一个