2020-08-19 02:01发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
嗨,
在启动Loop并实现业务逻辑之前,我想用相同的字符聚合内部表中的行。
我尝试使用"循环收集"将行从Itab1移到Itab2,这可以很好地工作,但是会花费太多时间。
我的要求是在我的逻辑在主循环中启动之前准备好内部表,以便容易汇总所有值。 我们有功能模块吗?
请提供任何可能的解决方案。
谢谢
>>我尝试使用"循环收集"将行从Itab1移到Itab2,这可以很好地工作,但是花费太多时间。
您可以显示编码和数据定义以及定义" 很多时间"是什么意思? 您有多少行数据,聚合后有多少行,这需要多长时间,什么时间可以接受?
因为您不清楚需要做什么,所以我假设以下内容:
1。 如果可能,让数据库已经进行聚合。 数据库系统非常了解性能,因此,要传输到SAP的数据也更少。
"选项a。 SELECT key1 key2 sum(value) 从dbtable INTO TABLE sumtable"必须已经使用字段key1,key2,value进行定义 在哪里(子句) GROUP BY key1 key2。 "选项b。 选择key1,key2,sum(value)作为sumvalue 从dbtable 到表@DATA(sumtable) 在哪里(子句) GROUP BY key1,key2。
2。 如果由于某种原因无法进行数据库聚合,则需要使用基于SORTED或HASHED表的COLLECT语句,该表还具有两个键字段作为键。 ABAP文档对STANDARD表的说明如下:
>>规则 >>不要用行集合填充标准表 >>仅使用语句 收集具有唯一键的哈希表或排序表。 >>不要再将其用于标准表。
对于您的问题,您可以按以下方式进行操作:
"结构yourstructure包含字段key1,key2,value 您的结构的数据不可分割的类型表。 带有唯一键key1 key2的结构的数据可汇总类型哈希表。 字段符号键入您的结构。 环在不可分配的处。 将收集到可汇总表中。 ENDLOOP。
这是ABAP文档所说的方法:
>> COLLECT仅在要创建真正唯一或压缩的内部表时才使用。 >>在这种情况下,COLLECT可以极大地提高性能。 >>如果不需要唯一性或压缩性,或者由于其他原因保证了唯一性,则应改用INSERT语句。
希望有所帮助。
Quynh Doan Manh 当然,断言"最有效的方法是在数据库级别执行... "仅当数据来自数据库时才是正确的,我的意思是,如果数据来自其他媒体,请不要将其写入数据库以进行聚合;-)
,我看不到 为什么在没有看到原始代码的情况下,LOOP AT GROUP BY比COLLECT更快。 COLLECT非常快。 这取决于整个算法。
这是并行游标编码! 爱它。 但实际上与OP问题关系不大,因为他需要从table1中创建table2。 并行游标浏览两个填充的表。
最多设置5个标签!
>>我尝试使用"循环收集"将行从Itab1移到Itab2,这可以很好地工作,但是花费太多时间。
您可以显示编码和数据定义以及定义" 很多时间"是什么意思? 您有多少行数据,聚合后有多少行,这需要多长时间,什么时间可以接受?
因为您不清楚需要做什么,所以我假设以下内容:
1。 如果可能,让数据库已经进行聚合。 数据库系统非常了解性能,因此,要传输到SAP的数据也更少。
2。 如果由于某种原因无法进行数据库聚合,则需要使用基于SORTED或HASHED表的COLLECT语句,该表还具有两个键字段作为键。
ABAP文档对STANDARD表的说明如下:
>>规则
>>不要用行集合填充标准表
>>仅使用语句 收集具有唯一键的哈希表或排序表。
>>不要再将其用于标准表。
对于您的问题,您可以按以下方式进行操作:
这是ABAP文档所说的方法:
>> COLLECT仅在要创建真正唯一或压缩的内部表时才使用。
>>在这种情况下,COLLECT可以极大地提高性能。
>>如果不需要唯一性或压缩性,或者由于其他原因保证了唯一性,则应改用INSERT语句。
希望有所帮助。
# p#Quynh Doan Manh 当然,断言"最有效的方法是在数据库级别执行... "仅当数据来自数据库时才是正确的,我的意思是,如果数据来自其他媒体,请不要将其写入数据库以进行聚合;-)
,我看不到 为什么在没有看到原始代码的情况下,LOOP AT GROUP BY比COLLECT更快。 COLLECT非常快。 这取决于整个算法。
这是并行游标编码! 爱它。
但实际上与OP问题关系不大,因为他需要从table1中创建table2。 并行游标浏览两个填充的表。
一周热门 更多>