SAP·ABAP/ABAP

ABAP 신문법 - Reduce

SEO_Joon 2025. 11. 5. 10:03

*&---------------------------------------------------------------------*
*& REDUCE 표현
*&
*& 인터널 테이블의 모든 행을 순차적으로 읽으면서 계산이 필요한 경우에 사용합니다.
*&---------------------------------------------------------------------*

TYPES : BEGIN OF LS_USER,
          ID       TYPE CHAR4,
          NAME     TYPE CHAR6,
          VALUE(5) TYPE I,
        END OF LS_USER.
TYPES : LT_USER TYPE TABLE OF LS_USER WITH KEY ID.

"기존문법

DATA : LT_SPFLI   TYPE TABLE OF SPFLI,
       LS_SPFLI   LIKE LINE OF LT_SPFLI,
       COUNT1(10),
       COUNT2(10).

SELECT *
  INTO TABLE LT_SPFLI
  FROM SPFLI.

LOOP AT LT_SPFLI INTO LS_SPFLI WHERE CARRID = 'LH'.
  COUNT1 = COUNT1 + 1.
ENDLOOP.


WRITE / : COUNT1.


"신규문법
COUNT2 = REDUCE I(
                  INIT X = 0          " X는 바로 생성 되어 선언 필요 없음.
                  FOR IS IN LT_SPFLI
                  WHERE ( CARRID = 'LH' ) "carrid가 'LH'면 계속 sum을 하여
                  NEXT X = X + 1 ).        " count2 변수에 합산함.
WRITE /: COUNT2.



"신규문법
DATA(LT_DATA) = VALUE LT_USER(
                              ( ID = '0002' NAME = 'HELLO'  VALUE = 100 )
                              ( ID = '0003' NAME = 'HELLO1' VALUE = 200 )
                              ( ID = '0004' NAME = 'HELLO2' VALUE = 300 )
                              ( ID = '0005' NAME = 'HELLO3' VALUE = 400 )
).

DATA(LV_SUM) = REDUCE SY-TABIX(
 INIT LV_RESULT = 10      "LV_RESULT 는 바로 생성 되어 선언 필요 없음.
FOR LS_DATA IN LT_DATA    " LS_DATA 는 바로 생성 되어 선언 필요 없음.
NEXT LV_RESULT = LV_RESULT + LS_DATA-VALUE ).


*BREAK-POINT.