DATA : lt_aufnr LIKE itab OCCURS 0 WITH HEADER LINE.
SELECT a~plnbez a~aufnr ~
FROM afko AS a INNER JOIN makt AS b ON a~mandt = b~mandt
AND a~plnbez = b~matnr
AND b~spras = sy-langu
~
LEFT OUTER JOIN ZTQM0015 AS G ON A~AUFNR = G~AUFNR => 1)
AND A~PLNBEZ = G~MATNR
INTO CORRESPONDING FIELDS OF TABLE itab
WHERE a~aufnr IN s_aufnr
AND a~plnbez IN s_plnbez
~ .
SORT itab BY aufnr.
DELETE ADJACENT DUPLICATES FROM itab.
lt_aufnr[] = itab[] .
loop at lt_aufnr.
clear: itab.
itab-aufnr = lt_aufnr-aufnr.
itab-cnt = 1.
collect itab.
endloop.
activeman님 말씀대로 collect를 써보았는데요.
itab의 aufnr에 따라 collect된 count가 modify되어 들어가야 하는데
위의 내용처럼 collect하면 itab의 끝에 append가 되어 들어갑니다.
1)부분을 따로 select하여 인터널테이블에 넣어 collect한다음 modify도
해보고 move-corresponding도 해보았지만 되지않아 다시 글을 올립니다.
댓글 6
-
activeman
2008.03.25 20:21
-
bizarre
2008.03.25 20:43
오더번호에 따른 합계구하는방법 제 글에서 COLLECT 하시라구 써주셨는데
전 그렇게 안하고 AT END OF 해서
AT END OF ebeln.
SUM.
ULINE (148).
WRITE:/ '|',
03(10) l_ebeln,
83(15) '구매문서 합계',
104(5) it_01-netpr CURRENCY 'KRW', "it_01-waers,
115(15) it_01-netwr CURRENCY 'KRW', "it_01-waers,
148(1) '|'.
그냥 이렇게 찍어줬습니다
COLLECT 제가 아직 초보라 F1을 봐도 COLLECT 사용법이 애매해서 사용하기 힘들더라구요 ㅜ.ㅜ
-
초보아밥퍼
2008.03.27 18:12
collect 구문은 인터널테이블의 정수들의 합계를 내는데 쓰입니다.
인터널 테이블의 필드중 문자가 다를경우 끝.
예제를 보여드리자면
인터널테이블 구조
aaa 필드 bbb 필드 ccc필드 ddd필드 eee필드
test ok no no 10
test ok no yes 10
retest no ok yes 10
test ok no yes 10
이러한 구조의 인터널 테이블을 컬렉트 하셨다면
결과는 다음과 같이 나오게 됩니다
aaa 필드 bbb 필드 ccc필드 ddd필드 eee필드
test ok no no 10
test ok no yes 20
retest no ok yes 10
이해가 되셨길... 합산된걸 보시면 test ok no yes의 문자 데이터가 동일합니다.
-
풍뎅이
2008.03.27 19:31
답변감사드립니다. -
마시멜로우
2008.03.31 20:01
eee필드의 타입은 어떤걸로해야하나요 f1보니까 N타입은 쓸수없던데..
-
드라곤
2009.02.05 19:56
EEE 필드타입은 F,I,P 타입만 가능합니다.
오더번호가 다른것 아닙니까..지금 collect 할때 오더번호(aufnr)하고 cnt 번호만 갖고 collect 하는데 append 될리가 없을 텐데요..
풍뎅이님 쪽지주세요..네이트온하시면요....
그리고 오더번호를 카운터 하실려면 아예 첨부터 SELECT a~plnbez a~aufnr count(*) 이렇게 하시는게 좋을 거구요..
아니면 다른 내용도 가져오고 난뒤에 카운터 하실려면 collect 를 사용하는게 좋습니다..
왜냐하면 db자료를 자주 가져오면 성능이 떨어 지겠지요..