【问题标题】:TSQL query for "accumulated value" [duplicate]“累计值”的 TSQL 查询 [重复]
【发布时间】:2012-08-06 04:53:51
【问题描述】:

可能重复:
Calculate a Running Total in SqlServer

我是 SQL 新手。这个问题似乎很基础,但我找不到答案,也许我没有找到正确的关键字。

在 SQL Server 2008 R2 中,我有一个这样的表:

Date      Value
---------------
2012-1-1    100
2012-1-2     50
2012-1-4    200

我想创建一个具有累积值的视图,如下所示:

Date      Total
---------------
2012-1-1    100
2012-1-2    150
2012-1-4    350

我该怎么做?

【问题讨论】:

  • @KenWhite,感谢您提供的信息,这正是我想要的。但请不要以为我没有尝试搜索。作为一个非英语使用者和 SQL 新手,我尝试了我能想到的每一个词,包括“汇总”、“累积”、“历史总和”等。我想既然我已经意识到这一点,我的问题应该真的是“SQL 世界中 [this thingy] 的术语是什么”。
  • 你说的完全正确——我不应该做出这样的假设。我在标签中看到了running-total,并假设(我们都知道那是什么意思)你把它放在那里了。我很抱歉。 :-(

标签: sql tsql sql-server-2008-r2 cumulative-sum


【解决方案1】:

这应该得到运行总数。试试这个:

SELECT dateHere,
       total,
       total + COALESCE(
                         (
                            SELECT SUM(total)
                            FROM myTable b
                            WHERE b.dateHere < a.dateHere
                          ), 0) AS RunningTotal
FROM     myTable a
ORDER BY dateHere

SQLFiddle Demo

【讨论】:

  • 我可以用它作为视图定义吗?我收到 SQL 执行错误:“ORDERBY”附近的语法不正确。 (我将“myTable”替换为“dbo.MyTable”)
  • ORDERBY 必须写成两个单独的单词ORDER BY。当然,您可以对此创建一个视图。
  • 您能发布您的新查询吗?请务必使用您自己的 columnNames 更改列。
  • 是的 ORDERBY 是问题所在。菜鸟失误。感谢您的回答并耐心等待我:)
  • 没问题。不客气 NS :)
【解决方案2】:

这是使用相关子查询的一种方法:

select t.date, t.value,
       (select sum(t2.value)
        from t t2
        where t2.date <= t.date
       ) as cumvalue
from t

【讨论】:

    猜你喜欢
    • 2014-07-13
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 2017-01-24
    • 1970-01-01
    • 2012-07-26
    相关资源
    最近更新 更多