250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 서울아파트
- 재경관리사개념
- 뉴스레터추천
- 쉬인
- 돈키레터
- 파리올림픽
- 재경관리사원가회계
- 뉴닉
- 계약갱신청구권
- 재무상태표
- 오물풍선
- 트럼프
- 트럼프당선
- 머니네버슬립
- SAP CO
- 경제뉴스레터
- 미스터동
- 뉴스레터정리
- 어피티
- 회계원리
- 예금자보호한도
- 비트코인
- 오픈AI
- TSMC
- 바이든
- 리비안
- 뉴스레터
- 회계원리개념
- 엔비디아
- 회계원리 개념
Archives
- Today
- Total
ASAP
[ABAP] Virtual Sort 하는 법, sort 할 때 key 다르게 설정하는 법 본문
728x90
간혹 sort할 때 지금 있는 데이터 기준이 아닌 다른 key를 주고 sort를 하고 싶을 때가 있을 것이다.
그럴 때 abap 7.52에 나온 virtual sort를 사용하면 된다. (아래 링크 참고)
https://blogs.sap.com/2017/09/20/abap-news-for-release-7.52-virtual-sorting-of-internal-tables/
클래스 CL_ABAP_ITAB_UTILITIES의 VIRTUAL_SORT라는 new method이다.
이 메소드는 인터널테이블을 바꾸지 않고 정렬을 하는데, 즉 기존 데이터에 영향을 주지 않는다.
아래는 virtual sort 를 이용해서 sort하는 예제 구문이다.
spfli 테이블 데이터에서 carrid로 정렬하는데 사용자가 지정한 대로 정렬하고자 하는 상황이다.
lt_sort_key에다가 순서를 정의를 하고
lt_sort_rule에다가 데이터대로 순서를 정의를 하자.
TYPES: BEGIN OF gty_s_sort_key.
TYPES: number TYPE n,
carrid TYPE spfli-carrid.
TYPES : END OF gty_s_sort_key.
TYPES : gty_t_sort_key TYPE STANDARD TABLE OF gty_s_sort_key WITH EMPTY KEY.
DATA: lt_sort_key TYPE gty_t_sort_key, "특정 방법으로 Sorting 할 Key 정의
lt_sort_rule TYPE gty_t_sort_key. "원천데이터와 Sorting 할 Key 값 맵핑
DATA: lt_data TYPE STANDARD TABLE OF spfli WITH DEFAULT KEY,
lt_final TYPE TABLE OF spfli.
* Sort 순서 정의
lt_sort_key[] = VALUE #( ( number = 1 carrid = 'LH' )
( number = 2 carrid = 'JL' )
( number = 3 carrid = 'AA' )
( number = 4 carrid = 'AZ' )
( number = 5 carrid = 'QF' )
( number = 6 carrid = 'SQ' )
( number = 7 carrid = 'DJ' )
( number = 8 carrid = 'UA' )
( number = 8 carrid = 'DL' )
).
SELECT DISTINCT carrid,
connid,
cityfrom,
cityto
FROM spfli
INTO CORRESPONDING FIELDS OF TABLE @lt_data.
lt_sort_rule[] = VALUE #( FOR data IN lt_data
FOR sort_key IN lt_sort_key WHERE ( carrid = data-carrid )
( number = sort_key-number carrid = data-carrid ) ).
DATA(lt_sort_idx) = cl_abap_itab_utilities=>virtual_sort(
im_virtual_source = VALUE #( ( source = REF #( lt_sort_rule[] )
components = VALUE #( ( name = 'NUMBER' ) ) )
( source = REF #( lt_data[] )
components = VALUE #( ( name = 'CARRID' ) ) )
) ).
lt_final = VALUE #( FOR idx IN lt_sort_idx ( lt_data[ idx ] ) ).
원래 데이터는 아래와 같았는데
virtual sort로 정렬을 하면 아래와 같다.
사용자가 지정해준 대로 정렬이 잘 되는 걸 확인할 수 있다.
이때 주의할 점은 lt_sort_rule의 데이터수와 lt_data의 데이터수가 일치해야 한다.
그러기 위해선 lt_sort_key에 모든 carrid의 순서를 지정해야 한다. 이렇게 하지 않으면 dump가 뜬다 ㅋㅋ
728x90
'SAP(ABAP) > 문법' 카테고리의 다른 글
[ABAP] LOOP AT GROUP BY 사용법 + 예제 (0) | 2023.03.07 |
---|---|
[SAP/ABAP] ALV Subtotal 맨 위에 표기 (0) | 2023.01.11 |
[ABAP] CLEAR vs REFRESH vs FREE (2) | 2022.08.22 |