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

时间:2019-06-11 18:54:26

标签: sap abap

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

enter image description here

从第一个表中的值开始,用这些表中的值的所有可能组合来获取第三个表的最有效方法是什么?就像1A,1B,1C,2A .....等等。

我可以使用任何标准框架吗?

3 个答案:

答案 0 :(得分:0)

您似乎需要两个表的cartesian product。在这种情况下,请按照here

所述使用CROSS JOIN

文章中的代码引用:

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.

答案 1 :(得分:0)

这是我能想象到的最短的一线飞机

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也可以做到这一点,但我相信它会更加冗长。

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

答案 2 :(得分:-1)

您可以将所有值加载到内部表中,然后进行嵌套循环以用连接列填充新内部表。