内表过滤代替LOOP where 循环:FILTER关键字用法

方式一:

DATA:LT_MARA_ALL  TYPE TABLE OF MARA,
     LT_MARA_8010 TYPE TABLE OF MARA.
SELECT * INTO TABLE @LT_MARA_ALL FROM MARA WHERE ERSDA BETWEEN '20240101' AND '20241231'.
LOOP AT LT_MARA_ALL INTO DATA(LS_MARA_ALLWHERE MTART '8010'.
  APPEND LS_MARA_ALL TO LT_MARA_8010.
  CLEAR:LS_MARA_ALL.
ENDLOOP.

方式二:

DATA:LT_MARA_ALL  TYPE STANDARD TABLE OF MARA WITH NON-UNIQUE SORTED KEY MTART COMPONENTS MTART,
     LT_MARA_8010 TYPE TABLE OF MARA.
SELECT * INTO TABLE @LT_MARA_ALL FROM MARA WHERE ERSDA BETWEEN '20240101' AND '20241231'.
IF SY-SUBRC EQ 0.
  LT_MARA_8010 FILTER #( LT_MARA_ALL USING KEY MTART WHERE MTART '8010' ).
ENDIF.

方式三:

DATA:LT_MARA_ALL   TYPE STANDARD TABLE OF MARA WITH NON-UNIQUE SORTED KEY MTART COMPONENTS MTART,
     LT_MARA_FINAL TYPE TABLE OF MARA.
SELECT * INTO TABLE @LT_MARA_ALL FROM MARA WHERE ERSDA BETWEEN '20240101' AND '20241231'.
DATA FILTER_TABLE TYPE SORTED TABLE OF MARA-MTART WITH UNIQUE KEY TABLE_LINE.

FILTER_TABLE VALUE #'8010' '8070' ).
LT_MARA_FINAL FILTER #( LT_MARA_ALL IN FILTER_TABLE WHERE MTART = TABLE_LINE ).

posted @ 2025-03-03 10:35  下一詀110  阅读(12)  评论(0)    收藏  举报