【发布时间】:2012-05-09 23:29:47
【问题描述】:
我的一位同事有一个问题,我正试图帮助他解决。
他有一个 SQL 视图,其中包含以下数据(示例数据):-
Category Value
Cat A 10
Cat A 20
Cat A 30
Cat B 15
Cat B 15
Cat C 10
Cat C 10
他想在视图中添加一列,以保持 Value 列的总和。
类别更改时,此列必须重置累计。
所以输出的数据一定是这样的:-
Category Value Running
Cat A 10 10
Cat A 20 30
Cat A 30 60
Cat B 15 15
Cat B 15 30
Cat C 10 10
Cat C 10 20
我们可以通过像这样将表格连接到自身来获得运行总数:-
select t1.id, t1.[count], SUM(t2.[count]) as sum
from TableA t1
inner join TableA t2 on t1.id >= t2.id
group by t1.id, t1.[count]
order by t1.id
问题是我们没有 ID 列,当类别更改时,我们如何指示累计重置??
【问题讨论】:
-
SQL Server 的哪个版本?这在 SQL Server 2012 中非常简单,因为 if finally(完全)支持窗口函数。
-
不幸的是 SQL Server 2005。
-
累计的顺序是如何计算的?表格中有日期字段吗?
-
表格将按类别然后按值排序,因此应按照上面数据出现的顺序计算总数。请注意,order by 子句必须在执行运行总计的查询中,因为数据是从不允许 order by 子句的视图中提取的。
标签: tsql sql-server-2005 cumulative-sum