gpt4 book ai didi

grouping - LOOP AT... GROUP BY 使用动态组键

转载 作者:行者123 更新时间:2023-12-03 23:05:35 30 4
gpt4 key购买 nike

我试图通过使用动态组参数对数据进行分组来循环。
我们可以在循环的 WHERE 条件上使用动态查询,但我不知道是否可以在组条件中使用动态字符串。
以下是用户决定按哪个字段分组,然后根据决定放置其他逻辑的示例:

DATA query TYPE string.
IF i_condition_type = 'ERNAM'.
query = |ERNAM = MARA-ERNAM|.
ELSE.
query = |ERSDA = MARA-ERSDA|.
ENDIF.

LOOP AT lt_mara INTO DATA(mara) GROUP BY ( (query) ) "syntax error
ASSIGNING FIELD-SYMBOL(<group>).
LOOP AT GROUP <group> ASSIGNING FIELD-SYMBOL(<line_data>).
"//do something
ENDLOOP.
ENDLOOP.
有没有办法做到这一点?除了分组之外,我也对其他想法持开放态度,因为如果我不能动态分组,我将复制这么多行并只更改组键。

最佳答案

正如评论中所指出的,LOOP AT ... GROUP BY不支持来自字符串的动态 group-by 子句。
在这个简单的例子中,你可以在运行时动态地创建你的分组键,方法是使用像 COND 这样的内联表达式来创建它。或 SWITCH :

LOOP AT lt_mara INTO DATA(mara) GROUP BY 
SWITCH string(
i_condition_type
WHEN 'ERNAM' THEN mara-ernam
WHEN 'ERSDA' THEN mara-ersda
ELSE ''
)
但是您的 key 构建逻辑可能太复杂而无法用表达式(或至少是人类仍然可读的表达式)来表达。在这种情况下,您还可以执行其他操作:对方法返回的值进行分组:
LOOP AT lt_mara INTO DATA(mara) 
GROUP BY my_grouping_method( line = mara
condition = i_condition_type )
然后,该方法的实现可以包含在运行时形成分组键所需的任何逻辑:
METHOD my_grouping_method.
IF condition = 'ERNAM'.
result = line-ernam.
ELSE.
result = line-ersda.
ENDIF.
ENDMETHOD.
分组方法也可以是不同对象的方法。因此,您可以将您的分组条件表示为一个自己的类。这将允许您编写这样的代码:
 DATA(lo_group_condition) = NEW zcl_mara_group_condition( 'ERNAM' ). 

LOOP AT lt_mara INTO DATA(mara)
GROUP BY lo_group_condition->get_key_from( mara )


关于grouping - LOOP AT... GROUP BY 使用动态组键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62956466/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com