怎么在tsql里面实现累加

阿飞 40 信誉分
2024-03-29T09:06:31.6+00:00

我有一张表如下

IMG_8691

我想变成如下

IMG_8692

除了用SUM(Amount) OVER(ORDER BY OrderDate)这种语法,有其他的方法实现吗

SQL Server
SQL Server
Microsoft 关系数据库管理和分析系统的一个系列,用于实现电子商务、业务线和数据仓库解决方案。
80 个问题
Transact-SQL
Transact-SQL
ANSI SQL 语言的 Microsoft 扩展,包括过程编程、局部变量和各种支持函数。
10 个问题
{count} 票

接受的答案
  1. CosmogHong-MSFT 23,321 信誉分 Microsoft 供应商
    2024-03-29T09:59:44.34+00:00

    有其他的方法实现吗

    有的,你也可以使用关联的子查询。或者针对数据量较少的数据集的话可以使用Cross Apply。

    但是优选方案依然是你现在使用的这个。

    一直听别人说窗口函数,我搜了一下也不是很理解,怎么感觉跟聚合函数差不多

    聚合函数,顾名思义,最终目标是把很多行的数据集聚合/精简为几行。需要使用Group By子句,按组进行聚合计算(求和、求平均值、最小值等等)。

    窗口函数一般指Over子句,里面具有以下参数:

    • PARTITION BY:将查询结果集分为多个分区。
    • ORDER BY:定义结果集的每个分区中行的逻辑顺序。
    • ROWS/RANGE:通过指定分区中的起点和终点来限制分区中的行数。 它需要 ORDER BY 参数,如果指定了 ORDER BY 参数,则默认值是从分区起点到当前元素。

    如果未指定任何参数,则将对整个结果集应用开窗函数。

    简单理解窗口函数就是,先把数据集分成多个区(即‘窗口’),再分别计算窗口中每一行的值。

    所以使用了窗口函数之后,就不需要Group By子句了,最后的结果集的行数不会减少。

    以你的这个语句为例,没有指定Partition by,所以默认对整个结果集的每一行都按照overdate顺序进行一次SUM计算。

    先计算第一行的SUM结果是100,再计算第二行的SUM结果是100+200=300,再计算第二行的SUM结果是100+200+100=400......以此类推,直到最后一行计算完毕。


    如果答案是正确的解决方案,请点击“接受答案”并投赞成票。如果您对此答案有其他疑问,请点击“评论”。


1 个其他答案

排序依据: 非常有帮助
  1. 阿飞 40 信誉分
    2024-03-29T09:10:21.97+00:00

    还有我想问一下,一直听别人说窗口函数,我搜了一下也不是很理解,怎么感觉跟聚合函数差不多,可以简单地讲解一下吗,谢谢大神们

    0 个注释 无注释