如何在AMDP方法中用纯SQL实现累计求和且不使用任何循环
实现方案
完全可以通过纯SQL实现该需求,你描述的E列计算逻辑是标准的**累计求和(累加和)**场景,AMDP底层基于HANA SQL,原生支持窗口聚合函数实现该逻辑,无需任何循环。
注意前提
累计求和依赖行的先后顺序,你需要先确认用来定义行顺序的排序字段(比如行号、单据日期、创建时间等,下文中统一用SORT_COL指代);如果需要按特定维度(比如物料、公司代码)分别计算累计值,还需要指定分组字段。
参考代码示例
无分组场景
如果不需要按维度拆分累计,直接按全局顺序计算:
SELECT D, SUM(D) OVER ( ORDER BY SORT_COL ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS E FROM <你已经计算出D列的源数据集/子查询>
按维度分组累计场景
如果需要按GROUP_COL字段分组,每组内单独计算累计值:
SELECT D, SUM(D) OVER ( PARTITION BY GROUP_COL ORDER BY SORT_COL ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS E FROM <你已经计算出D列的源数据集/子查询>
语法说明
SUM() OVER()是窗口聚合函数,不会像普通SUM那样合并行,会为每行都返回计算结果ORDER BY SORT_COL指定累计的行顺序,保证和你预期的行序一致ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW定义计算范围为当前行所在分区的第一行到当前行,完全匹配你要求的E列计算规则- HANA SPS08及以上版本均支持该语法,当前主流SAP S/4HANA、ECC on HANA系统都满足版本要求,可直接在AMDP中使用
内容的提问来源于stack exchange,提问作者Ronaldo
相关产品推荐
相关产品推荐

