【发布时间】:2012-06-05 14:52:30
【问题描述】:
我正在寻找一种在大型 SQL Server 2008 数据集中创建累积总计的快速方法,该数据集按特定列进行分区,可能使用多重赋值变量解决方案。作为一个非常基本的示例,我想在下面创建“cumulative_total”列:
user_id | month | total | cumulative_total
1 | 1 | 2.0 | 2.0
1 | 2 | 1.0 | 3.0
1 | 3 | 3.5 | 8.5
2 | 1 | 0.5 | 0.5
2 | 2 | 1.5 | 2.0
2 | 3 | 2.0 | 4.0
传统上,我们使用相关子查询来完成此操作,但在处理大量数据(超过 200,000 行和几个不同类别的运行总数)时,这并不能为我们提供理想的性能。
我最近在这里读到了关于使用多个赋值变量进行累积求和:
http://sqlblog.com/blogs/paul_nielsen/archive/2007/12/06/cumulative-totals-screencast.aspx
在该博客的示例中,累积变量解决方案如下所示:
UPDATE my_table
SET @CumulativeTotal=cumulative_total=@CumulativeTotal+ISNULL(total, 0)
对于上述示例中的单个用户(用户 1 或用户 2)求和,此解决方案似乎非常快。但是,我需要按用户有效分区 - 给我按月按用户的累计总数。
有没有人知道扩展多重赋值变量概念来解决这个问题的方法,或者除了相关子查询或游标之外的任何其他想法吗?
非常感谢任何提示。
【问题讨论】:
-
您是否拥有大量用户或大量月份或两者兼而有之?还有什么版本的 SQL Server?
-
嗨亚伦。大量的用户,但只有几个月(从不超过大约 24 个)。 SQL Server 2008。
-
我认为你的第三行应该有
cumulative_total = 6.5,而不是8.5。
标签: sql-server sql-server-2008