우선 기본예제는 타 블로그를 통해 공부하였다.
select distinct carrid, connid, class from sbook into table @data(lt_sbook) to 1000 rows.
즉, 1000개중에 저 3개필드가 중복 빼고 가져와바..
하니 78개을 가져왔다.
그럼 본격적으로 loop at group by 를 써보자.
loop at lt_sbook into data(ls_sbook) group by( carrid = ls_sbook-carrid
connid = ls_sbook-connid )
assigning field-symbol(<fs_group>).
write :/ 'ls_sbook : ' , ls_sbook. 1번write
clear : ls_sbook.
ls_sbook = <fs_group>. (그룹을 담아줌)
write :/ 'ls_sbook : ' , ls_sbook. 2번 write
clear : ls_sbook.
loop at group <fs_group> assigning field-symbol(<fs_loop>). ( 그룹안을 루프)
ls_sbook = <fs_loop>.
write :/ 'ls_sbook : ' , ls_sbook. 3번 write
clear : ls_sbook.
endloop.
폰으로 코딩을 썼으니 마침표나 오타는 각자 수정을...
자세히 설명해보면
1.제일 큰 바깥 그룹바이 루프는 carrid , connid 가 중복되지 않는 첫 시작부분만 돈다.
무슨 말이냐...
즉 AA 0017 F <-- 여기 돈다
AA 0017 C
AA 0017 Y
AA 0064 C <-- 여기돈다
AA 0064 Y
AA 0064 F
....
그 후 안에있는 내부루프에서 저 3개씩을 돈다는 뜻이다...
그런디 아래 출력은 좀 달라보이지?
보여주기위한 코딩을 해서 그런건데
위에 1번 write 에는 값이 안담긴다는걸 보여주는거고(큰 loop를 도는데 그룹바이를 쓰니 into에 값이 없다는걸 보여주고 싶었다.)
2번 write에는 그룹바이에 넣은 데이터 필드값만 들어갔다는걸 보여주고 싶었다.
(2개 필드값만 나오지?)
3번 write는 이제 내부 loop 에 group by 지은 필드값이 같은것들이 반복으로 찍힌것이다..
이건 엄청나게 간편해진 코딩이다....
만약 old abap 일 때라면....
이중루프는 똑같이 돌면서도
at new / at end of 같은 구문을 사용했을 것이다...
루프 안에서 if 필드값 비교를 하거나.....
그렇기에 loop at group by 는 무조건 익혀두는게 좋다.... 이걸 한번 익혀 쓰면 이전 old abap 이 생각이 안날 정도이다..
'ERP-SAP > ABAP' 카테고리의 다른 글
<ABAP> 유지보수뷰에 버튼 추가하기, 추가한 버튼에 이벤트 넣기(ADD BUTTON Maintenance view) (0) | 2024.12.13 |
---|---|
<ABAP> Dynamic internal table (동적 인터널 테이블)에서 cell tab color tab 넣기 만들기 (0) | 2024.12.13 |
<NEW ABAP> 3강 APPEND ITAB 을 쉽게 해보자. (1) | 2024.11.18 |
<NEW ABAP> 2강 READ TABLE을 NEW ABAP으로 바꿔보기 + 1강도 추가연습 (0) | 2024.11.15 |
<NEW ABAP> 1강 COND, SWITCH (OLD ABAP : CASE, IF) 로 바꿔보기 (0) | 2024.11.15 |