SELECT T1, T2, T3, T5, T6, T7, RACCT
FROM NEXT
APPENDING CORRESPONDING FIELDS OF TABLE ITAB_DATA
WHERE RYEAR = p_date+0(4)
AND RLDNR = '0L'
AND RRCTY = '0'
AND ( RACCT BETWEEN '0011110110' AND '0011110990'
OR RACCT BETWEEN '0011210110' AND '0011210990'
OR RACCT BETWEEN '0011220110' AND '0011220990'
OR RACCT EQ '0011290110'
OR RACCT BETWEEN '0011230100' AND '0011230990' ).
LOOP AT NEXT1.
COLLECT NEXT1 into NEXT2.
*
ENDLOOP.
APPEND LINES OF NEXT2 TO NEXT3.
에서 RACCT를 제외한 나머지는 모두 CURRENCY타입이고 RACCT는 CHAR입니다. SELECT로 검색 한 후 검색 한 내용을 COLLECT문으로 이용해서 NEXT1으로 옮기고 더해진 값을 NEXT3에 인터널 테이블에 으로 APPEND문을 이용해서 순차적으로 쌓은 후 그 값을 ALV로 출력 하려고 하는데요 RACCT를 제외하면 값이 정상적으로 나오는데 CHAR타입인 RACCT를 SELECT문에 넣어서 하면 값이 엉뚱하게 나옵니다. 코딩을 너무 원시 적으로 한거 같은데 더 좋은 방법이 없을까요 ?
혹은 RACCT를 이용하여 검색한 후 COLLECT문 앞에서 RACCT열만 삭제 한후 더하는 방법이 없을까요 ? 고수님의 답변 부탁 드립니다. 주변에서는 간단하다고 하는데 저는 막히네요 ㅠㅜ
참고로 말씀 드리자면 WHERE조건이 많아서 많은 수의 SELECT문이 생겼습니다. FORM으로 묶었는데 좋은 방법이 없을까요 ???
GROUP BY를 사용하시기를 ..
COLLECT나 GROUP BY나 속도에서 별차이 없습니다. 어떤경우는 COLLECT보다 GROUP BY가 더 빠른경우도 있구요
TRACE 떠보시고 결정하시면되겠구요.
RACCT의 값은 쿼리를 변경하길 원하신다면 RACCT 마스터에서 값을 읽어와 인터널테이블에 담은후
FOR ALL ENTRIES를 사용해보세요~~