【问题标题】:How to get cumulative sum in SQL Server (Z=Z+A+B-C)如何在 SQL Server 中获取累积和(Z=Z+A+B-C)
【发布时间】:2020-08-20 20:28:33
【问题描述】:

我想在 SQL 中的表 (Commul_table) 中创建累积和,例如 Z=Z+ (A+B-C)

【问题讨论】:

  • 否,因为我想在 Z 列的每一行中添加和减去多个单元格,(Z=Z+A+B-C)
  • sum(a+b-c) over (order by Id rows unbounded preceding)
  • 样本数据似乎与您建议的计算无关。第二个z 值应为 8。

标签: sql cumulative-sum


【解决方案1】:

在这种情况下,您可以将analytic function 与rows unbounded preceding 一起使用(获取当前行之前的总和值)

Select id, A,B,C,sum(A+B-C) over(order by Id rows unbounded preceding) as Z
From Table

【讨论】:

  • 阿里贾马尔,你试试查询吗?)
  • 感谢您的帮助,已运行。
  • 如果运行,请检查答案 - 只需将其标记为解决方案)
【解决方案2】:

它仍然是一个累积和,只是基于三列的计算:

sum(a+b-c) over (order by Id rows unbounded preceding)

见fiddle

【讨论】:

  • 寻求帮助
【解决方案3】:

我的回答是指出大多数数据库都不需要窗框子句。假设id 是唯一的:

select ct.*, sum(a + b - c) over (order by id) as z
from Commul_table;

如果id 可以重复,请说明您想要的结果。以上还假设a、b 和c 永远不是NULL。如果可以,那么您想用0 代替它们:

select ct.*,
       sum(coalesce(a, 0) + coalesce(b, 0) - coalesce(c, 0)) over (order by id) as z
from Commul_table;

【讨论】:

    猜你喜欢
    • 2021-04-25
    • 2015-07-26
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    相关资源
    最近更新 更多