>itab1
>KEY | 항목 | 항목값 |
>____________________________
>A | a1 | b1 |
>A | a2 | b2 |
>A | a3 | b3 |
> B : :
>____________________________ 형태를 key 값이 같은 항목과 항목값을
>
>===>
>
>itab2
> | a1 | a2 | a3 |
> ---------------------------------------
>A | b1 | b2 | b3 | 가로 형태로 채워야합니다.
>
>B
>
>둘다 인터널 테이블입니다.
>
>필드심볼로 루프돌려서 이래저래하는데 잘 안되네요
>
>
>
>
>
>
요요님 답글이 달려 답글 달기는 민망하지만 무식한 방법도 있어 답글 답니다.
필드 심볼은 정확한 데이터를 몰라 패쓰.... ^^;;
CONSTANTS : c_a TYPE c VALUE 'A',
c_b TYPE c VALUE 'B'.
FIELD-SYMBOLS : <field> TYPE ANY,
<value> TYPE ANY.
DATA : l_field TYPE char30,
l_index TYPE num2.
* 원천 자료
DATA : BEGIN OF itab OCCURS 0 ,
key TYPE char1 ,
cell TYPE char3,
value TYPE char3,
END OF itab.
* 작업참조
DATA : itab_1 LIKE itab OCCURS 0 WITH HEADER LINE.
* 변환 자료
DATA : BEGIN OF itab2 OCCURS 0,
key TYPE char1,
cell01 TYPE char3,
cell02 TYPE char3,
cell03 TYPE char3,
cell04 TYPE char3,
cell05 TYPE char3,
cell06 TYPE char3,
cell07 TYPE char3,
cell08 TYPE char3,
cell09 TYPE char3,
cell10 TYPE char3,
END OF itab2,
ls_tab2 LIKE itab2.
DATA : l_key TYPE char1,
l_cell TYPE char3,
l_value TYPE char3.
DEFINE _fill_up.
itab-key = &1.
itab-cell = &2 .
itab-value = &3.
append itab. clear itab.
END-OF-DEFINITION.
*&--------------------------------------------------------
PARAMETERS : p_num TYPE numc2 DEFAULT 10 OBLIGATORY.
*&--------------------------------------------------------
START-OF-SELECTION.
CHECK p_num LE 10 .
DO p_num TIMES .
l_index = sy-index.
* A 키 자료 생성
l_key = c_a.
CONCATENATE c_a l_index INTO l_cell.
CONCATENATE c_b l_index INTO l_value.
_fill_up l_key l_cell l_value.
* B 키 자료 생성
l_key = c_b.
CONCATENATE c_a l_index INTO l_cell.
CONCATENATE c_b l_index INTO l_value.
_fill_up l_key l_cell l_value.
ENDDO .
SKIP 2.
LOOP AT itab.
WRITE :/05 itab-key COLOR 2,
itab-cell COLOR 2,
itab-value COLOR 2.
ENDLOOP. " LOOP AT ITAB.
SKIP 2.
* 작업 정렬
SORT itab.
itab_1[] = itab[].
* 작업기준 자료 생성 - 키
DELETE ADJACENT DUPLICATES FROM itab_1
COMPARING key .
* 중복자료 제거
DELETE ADJACENT DUPLICATES FROM itab
COMPARING key cell value.
CLEAR l_index.
LOOP AT itab_1 . " 키 기준 테이블
LOOP AT itab WHERE key EQ itab_1-key .
* 키반영
ls_tab2-key = itab-key. " 키반영
* 필드별
CASE itab-cell.
WHEN 'A01'.
* CONCATENATE 'ITAB2-CELL' l_index INTO l_field.
* ASSIGN (l_field) TO <field>.
* <field> = itab-value.
ls_tab2-cell01 = itab-value.
WHEN 'A02'.
ls_tab2-cell02 = itab-value.
WHEN 'A03'.
ls_tab2-cell03 = itab-value.
WHEN 'A04'.
ls_tab2-cell04 = itab-value.
WHEN 'A05'.
ls_tab2-cell05 = itab-value.
WHEN 'A06'.
ls_tab2-cell06 = itab-value.
WHEN 'A07'.
ls_tab2-cell07 = itab-value.
WHEN 'A08'.
ls_tab2-cell08 = itab-value.
WHEN 'A09'.
ls_tab2-cell09 = itab-value.
WHEN 'A10'.
ls_tab2-cell10 = itab-value.
ENDCASE. " CASE ITAB-CELL.
ENDLOOP. " LOOP AT itab WHERE key EQ itab_1-key .
* ITAB2 자료 반영
APPEND ls_tab2 TO itab2. CLEAR : ls_tab2, itab2.
ENDLOOP. " LOOP AT ITAB_1 .
*
DESCRIBE TABLE itab2 LINES sy-tfill .
WRITE :/05 ' 생성 건수 : ' COLOR 4,
sy-tfill COLOR 7.
SKIP.
LOOP AT itab2 .
WRITE :/05 itab2-key COLOR 2,
itab2-cell01 COLOR 2 ,
itab2-cell02 COLOR 2 ,
itab2-cell03 COLOR 2 ,
itab2-cell04 COLOR 2 ,
itab2-cell05 COLOR 2 ,
itab2-cell06 COLOR 2 ,
itab2-cell07 COLOR 2 ,
itab2-cell08 COLOR 2 ,
itab2-cell09 COLOR 2 ,
itab2-cell10 COLOR 2 .
ENDLOOP.
무슨 그런말씀을... ^^;; 다른게 별로 없는데요. 어차피 item 기준으로 필드 찾아 들어가는 건데요. 뭐. ^^*
kkamui 님처럼 하는 게 정석이죠. 보기도 쉽구요. 좋은 자료 감사합니다.