不同的累计和

Cumulative Sum Distinct

我有一个视图 refv_ActiveOpen,其中有 SuburbName, Weeks, ServiceCount,我想从中创建第二个视图,显示每周累积的 ServiceCount。该视图必须具有不同的周和郊区名称。例如:

  SuburbName |Weeks|ServiceCount|Accumulative
   Pretoria  |1    |100         |100
   Pretoria  |2    |30          |130
 Johannesburg|1    |30          |30
 Johannesburg|2    |20          |50

以上是我要显示的结果。对于每个郊区,都应该有一列显示不同的郊区以及每个郊区每周 运行 总数的变化情况。我总计获得了 运行 的总分,但这不是我想要的。请协助

在大多数数据库中,您可以使用 ANSI 标准累积和函数:

select t.*,
       sum(Service_Count) over (partition by SuburbName order by weeks) as accumulative
from refv_ActiveOpen t;

自 2012 版以来,SQL 服务器已支持此功能。

您可以通过窗口函数使用求和和排序

Select *, accumulative =  sum(service count) over(partition by suburb name, weeks order by weeks) from yourtable

ANSI-SQL,应该适用于任何 RDBMS:

SELECT t1.SuburbName, t1.Weeks, t1.ServiceCount, sum(t2.ServiceCount) as Accumulative
FROM refv_ActiveOpen t1
INNER JOIN refv_ActiveOpen t2
  ON t1.SuburbName = t2.SuburbName -- Same suburb
  AND t1.Weeks >= t2.Weeks -- All the weeks up to the week from t1.
GROUP BY t1.SuburbName, t1.Weeks, t1.ServiceCount

这使用自连接为您的 table(别名 t1)的每一行生成相同郊区的匹配行集,周数 相同或更低。然后对后面的行求和以获得前几周的累计服务数量。