Abap 不带循环地得到总数
我指的是这个问题和答案。但我的要求要简单得多。我只需要类别及其相应的总数 我的内部表格如下:Abap 不带循环地得到总数,abap,Abap,我指的是这个问题和答案。但我的要求要简单得多。我只需要类别及其相应的总数 我的内部表格如下: Category Amount AAA 10 AAA 20 BBB 30 CCC 40 CCC 50 CCC 60 我需要构建内部表,如下所示: Category Amount AAA 30 BBB 30 CCC 150 有人能帮上忙吗?从7.40版及以后,这可以通过将内部表中的分组()与用于计算每个组的总和相结合来
Category Amount
AAA 10
AAA 20
BBB 30
CCC 40
CCC 50
CCC 60
我需要构建内部表,如下所示:
Category Amount
AAA 30
BBB 30
CCC 150
有人能帮上忙吗?从7.40版及以后,这可以通过将内部表中的分组()与用于计算每个组的总和相结合来实现 首先是几个声明:
TYPES:
BEGIN OF data_struct,
category TYPE c LENGTH 3,
amount TYPE i,
END OF data_struct,
data_tab TYPE STANDARD TABLE OF data_struct WITH EMPTY KEY.
DATA(input) = VALUE data_tab(
( Category = 'AAA' Amount = 10 )
( Category = 'AAA' Amount = 20 )
( Category = 'BBB' Amount = 30 )
( Category = 'CCC' Amount = 40 )
( Category = 'CCC' Amount = 50 )
( Category = 'CCC' Amount = 60 )
).
这里是解决方案:
DATA(output) = VALUE data_tab(
FOR GROUPS group OF input_line IN input
GROUP BY ( category = input_line-category )
( category = group-category
amount = REDUCE #(
INIT subtotal = 0
FOR group_line IN GROUP group
NEXT subtotal = subtotal + group_line-amount
)
)
).
现在这里到底发生了什么
内部表输出的数据由组生成。组的表表达式由三部分组成:组的声明、分组标准和结果
首先是关于声明性部分:在input
中对输入行分组。这定义了一个名为“组”的组,其源是内部表“输入”,我们将该源表的每一行称为“输入线”
接下来是分组标准:groupby(category=input\u line-category)
。这意味着每个组都由一个带有单个字段“category”的键标识,并且我们希望对字段“category”相同的所有行进行分组
现在是结果部分:
( category = group-category
amount = REDUCE #(
INIT subtotal = 0
FOR group_line IN GROUP group
NEXT subtotal = subtotal + group_line-amount
)
)
这定义了每个组在输出集中的表示方式。第一个字段“category”很简单-只需输入名为“group”的组的“category”值
第二个字段“amount”有点复杂,因为它的值是由REDUCE
计算的。REDUCE构造表达式的目的是获取多个值并将它们转换为一个值。它通过执行以下操作来实现这一点:
声明并初始化变量:INIT subtotal=0
对组的内部表或外部中的组行执行循环。在这种情况下,后者:用于组中的组_行
对输入的每一行执行相同的代码段,更改变量。在这种情况下,将其金额添加到小计中:NEXT subtotal=subtotal+group\u line-amount
返回步骤1中声明的变量的最终值
调试器的结果:
您尝试了什么?你的问题是什么?这能回答你的问题吗?OP尝试执行的操作在标准SQL中称为聚合。但是,这在OpenSQL中不可用。谢谢。正是我需要的。也谢谢你的解释。