Abap 如何生成两个内部表的笛卡尔乘积?

Abap 如何生成两个内部表的笛卡尔乘积?,abap,Abap,我其实有一个简单的要求。 给出了两个表: 从第一个表的值开始,获取第三个表以及这些表中所有可能的值组合的最有效方法是什么?比如1A、1B、1C、2A……等等 是否有任何标准框架可供使用?您可以将所有值加载到内部表,然后进行嵌套循环,以便使用串联列填充新的内部表。看起来您需要两个表的组合。在这种情况下,使用所述的交叉连接 文章中的代码引用: REPORT ZZZ. SELECT t000~mandt, t000~mtext, t100~* FROM t000 CROSS JOIN

我其实有一个简单的要求。 给出了两个表:

从第一个表的值开始,获取第三个表以及这些表中所有可能的值组合的最有效方法是什么?比如1A、1B、1C、2A……等等


是否有任何标准框架可供使用?

您可以将所有值加载到内部表,然后进行嵌套循环,以便使用串联列填充新的内部表。

看起来您需要两个表的组合。在这种情况下,使用所述的交叉连接

文章中的代码引用:

REPORT ZZZ.

SELECT t000~mandt, t000~mtext, t100~*
       FROM t000 CROSS JOIN t100
       WHERE t100~arbgb = 'SABAPDEMOS'
       ORDER BY t000~mandt, t100~sprsl, t100~msgnr
       INTO TABLE @DATA(itab).

BREAK-POINT.

这是我能想象到的最短的班轮

TYPES: tt     TYPE TABLE OF c WITH EMPTY KEY,
       tt_res TYPE TABLE OF char2 WITH EMPTY KEY.

DATA(t1) = VALUE tt( ( '1' ) ( '2' ) ( '3' ) ).
DATA(t2) = VALUE tt( ( 'A' ) ( 'B' ) ( 'C' ) ).
DATA(l2) = lines( t2 ).

DATA(result) = VALUE tt_res(  ).

DO lines( t1 ) * l2 TIMES.
  result = VALUE #( BASE result ( t1[ ( sy-index + l2 - 1 ) DIV l2 ] && VALUE #( t2[ sy-index MOD l2 ] DEFAULT t2[ l2 ] ) ) ).
ENDDO.
虽然,它使用循环,但不使用嵌套循环。这个符号不是很可读,但是很短。我确信也有办法使用
VALUE...FOR
实现,但我相信它会更加冗长


当然,您应该调整实际表的类型,并在更大的数据集上进行测试。

这些表是数据库表吗?不,是内部表。这是一个非常基本的算法,可以在一条语句中编写。因为它看起来像一个,你至少应该解释一下你尝试了什么,等等。我不明白为什么应该有一个“框架”来实现它。谢谢你的反馈,桑德拉!实际的问题有点复杂,我只是尽可能地简化它,但你完全正确,它非常简单,我可以用一句话来解决它。我已经要求结束这个问题。谢谢你的反馈!是的,这实际上是我所需要的,但是对于内部表,我想知道是否有任何优雅的方法可以在没有嵌套循环的情况下做到这一点。我不认为内部表存在交叉连接,因此,如果数据不是来自数据库,那么循环将是唯一的解决方案。如果它确实如此,那么在把数据放在内部表之前,你应该考虑做交叉连接。谢谢反馈。对于我问题中的那些表格,这不是问题。但当我有两个超过100个条目的表时,我想知道是否有好的方法,可以使用abap中的内置