sum을 사용하자니 타입이 numeric만 된다 하고,
collect는 p, i, f 타입만 됩니다.
금액합을 구할 때 어떻게 해야 할까요? ㅠㅠ
제가 한것은 loop도 많이 돌고, append니 delete니..너무 복잡해서요..
어떻게 해야 깔끔한 구문이 될까요?
고수님들의 답변 부탁드립니다 ㅠㅠ
참! 참고로..collect를 사용하려고 price의 data type을 변경하려고 했는데,
문제는 모든 키필드에 대한 collect를 하면 안되고,
예를들어 carrid만 같을 때만 price의 합을 구해야 합니다..ㅠㅠ
DATA: gs_list TYPE sflight,
lt_temp LIKE TABLE OF gs_list,
gt_list LIKE lt_temp,
ls_temp LIKE gs_list.
SELECT *
FROM sflight
INTO CORRESPONDING FIELDS OF TABLE lt_temp.
SORT lt_temp BY carrid connid.
CLEAR: gs_list, ls_temp.
LOOP AT lt_temp INTO gs_list.
IF ls_temp IS INITIAL.
ls_temp = gs_list.
APPEND gs_list TO gt_list.
CLEAR: gs_list.
CONTINUE.
ENDIF.
IF ls_temp-carrid = gs_list-carrid.
gs_list-price = gs_list-price + ls_temp-price.
APPEND gs_list TO gt_list.
DELETE TABLE gt_list FROM ls_temp..
ls_temp = gs_list.
ELSE.
APPEND gs_list TO gt_list.
ls_temp = gs_list.
ENDIF.
CLEAR: gs_list.
ENDLOOP.
LOOP AT gt_list INTO gs_list.
WRITE:/ gs_list-carrid,
gs_list-connid,
gs_list-price.
CLEAR: gs_list.
ENDLOOP.
댓글 4
-
테라스
2009.06.19 22:04
-
bd
2009.06.20 00:37
흠.. " 예를들어 carrid만 같을 때만 price의 합을 구해야 합니다..ㅠㅠ " 이란 구문이 있다면..
ITAB을 'sflight' 아닌 다르게 가야하지 않을까 하는 생각이 드내용.분명
CONNID ,
FLDATE 필드에 값이 있다면 말이죠 ^^
허접 코딩 날라 감니다. 코딩 테클 대환입니다. ^^
*&---------------------------------------------------------------------*
*& Report YKDNTEST013
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT YKDNTEST013.
DATA : LT_LIST TYPE TABLE OF SFLIGHT,
LS_LIST LIKE LINE OF LT_LIST,
LT_LIST_SUM TYPE TABLE OF SFLIGHT.
*SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_TEMP FROM SFLIGHT.
LS_LIST-CARRID = 'AAA' .
LS_LIST-CONNID = 'BBB'.
LS_LIST-FLDATE = '20090619'.
LS_LIST-PRICE = '100'.
APPEND LS_LIST TO LT_LIST.
LS_LIST-CARRID = 'AAA' .
LS_LIST-CONNID = 'BBB'.
LS_LIST-FLDATE = '20090620'.
LS_LIST-PRICE = '100'.
APPEND LS_LIST TO LT_LIST.
LS_LIST-CARRID = 'BBB' .
LS_LIST-CONNID = 'BBB'.
LS_LIST-FLDATE = '20090619'.
LS_LIST-PRICE = '100'.
APPEND LS_LIST TO LT_LIST.
LS_LIST-CARRID = 'BBB' .
LS_LIST-CONNID = 'BBB'.
LS_LIST-FLDATE = '20090620'.
LS_LIST-PRICE = '100'.
APPEND LS_LIST TO LT_LIST.
SORT LT_LIST BY CARRID.
LOOP AT LT_LIST INTO LS_LIST.
AT END OF CARRID.
SUM.
APPEND LS_LIST TO LT_LIST_SUM.
CLEAR LS_LIST.
ENDAT.
ENDLOOP.
BREAK-POINT. -
거북이
2009.06.20 00:49
개념으로 볼 때...
collect 하지 않는 특성값이 있다면..
불필요한 값일 가능성이 높은데요..
이건 인터널 테이블을 꼭 필요한 것으로만 정의하는 것이 좋을 듯 하구요..
가격은 collect 가능한 유형인데..
안된다면 인터널 테이블 선언할 때 가능한 유형으로 만들 면 됩니다.
데이터 길이만 일치하면 같은 숫자 유형이라 자동 conversion 됩니다.
그럼..
Loop
move
collect
endloop.
이정도 구문이면 되겠네요.. ^^
-
초보초보
2009.06.22 07:11
감사합니다~^-^*
data: l_price like sflight-price.
LOOP AT lt_temp INTO ls_temp.
gs_list = ls_temp.
l_price = l_price + ls_temp-price.
at end of carrid.
gs_list-price = l_price.
append gs_list to gt_list.
clear: gs_list, l_price.
endat.
ENDLOOP.
이렇게 한번 해보세요