【问题标题】:SQL query to find the running total [duplicate]SQL查询查找运行总计[重复]
【发布时间】:2015-12-21 19:48:57
【问题描述】:

请帮我找出下表的总和

http://sqlfiddle.com/#!3/2c0ec/1

上面显示的示例是一个示例。用于到达此位置的实际查询非常大,因此自连接不是一个可行的选择。请建议使用 sum() over(.....) 之类的函数

以下是输出

提前致谢

【问题讨论】:

  • 请指定预期的输出。

标签: sql sql-server-2008


【解决方案1】:

标准方式是使用子查询:

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

【讨论】:

    【解决方案2】:

    我之前问过,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

    希望这个帖子能帮到你。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-23
      • 2018-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多