【发布时间】:2015-12-21 19:48:57
【问题描述】:
请帮我找出下表的总和
http://sqlfiddle.com/#!3/2c0ec/1
上面显示的示例是一个示例。用于到达此位置的实际查询非常大,因此自连接不是一个可行的选择。请建议使用 sum() over(.....) 之类的函数
以下是输出
【问题讨论】:
-
请指定预期的输出。
标签: sql sql-server-2008
请帮我找出下表的总和
http://sqlfiddle.com/#!3/2c0ec/1
上面显示的示例是一个示例。用于到达此位置的实际查询非常大,因此自连接不是一个可行的选择。请建议使用 sum() over(.....) 之类的函数
以下是输出
【问题讨论】:
标签: sql sql-server-2008
标准方式是使用子查询:
select *, (select sum(salary) from tablename t2 where t2.id <= t1.id) as runningsalary
from tablename t1
在Sql Server 2012 + 中,您可以为此使用窗口函数:
select *, sum(salary) over(order by id) as runningsalary
from tablename t1
【讨论】:
我之前问过,2008版可以使用Common Table Expression (CTE),2012版可以使用OVER子句
这是我从黑暗骑士那里得到的一个答案。
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
学分:https://stackoverflow.com/a/32240745/5197152
How to continously add values of starting row and next row to it
希望这个帖子能帮到你。
【讨论】: