用abap实现内表的行列转换

源代码2

****向第一行加一个空数据,有几个不同的num就加几个

RTAB2-NUM = '' .

APPEND RTAB2 TO ITAB2 .

****有几个相同的num就加几个

DO L_NUM TIMES .

RTAB2-NUM = RTAB1-NUM .

APPEND RTAB2 TO ITAB2 .

ENDDO .

ENDAT .

ENDLOOP .

***初始化行列数

L_H = '0' .

L_V = '1' .

L_CY = '0' .

***处理开始了

LOOP AT ITAB1 INTO RTAB1 .

APPEND RTAB1 TO ITAB1_TEMP .

AT END OF NUM .

****相同的num作为一个组处理

DESCRIBE TABLE ITAB1_TEMP LINES L_X .

DO L_COUN TIMES .

L_INDEX = L_INDEX + 1 .

******准备修改的表数据

READ TABLE ITAB2 ASSIGNING INDEX L_INDEX .

DO L_X TIMES .

********取得要修改的元素

CONCATENATE '-' L_H INTO L_TEMP .

ASSIGN (L_TEMP) TO .

READ TABLE ITAB1_TEMP ASSIGNING INDEX L_V .

CONCATENATE '-' L_CY INTO L_TEMP .

ASSIGN (L_TEMP) TO .

********修改完成

= .

********行列累加

L_H = L_H + 1 .

L_V = L_V + 1 .

ENDDO .

******列累加,再初始化,继续处理下一列

L_CY = L_CY + 1 .

L_H = '0' .

L_V = '1' .

ENDDO .

****记得要清空临时表

CLEAR: ITAB1_TEMP[],ITAB1_TEMP .

ENDAT .

**重置列名

L_CY = '0' .

ENDLOOP .

***上面转置好了,下面整理一下表

**取得第一行的数据

READ TABLE ITAB2 ASSIGNING INDEX 1 .

LOOP AT ITAB2 INTO RTAB2 .

***如果下面有比第一行多的数据,把多的给第一行

IF SY-TABIX <> 1 AND RTAB2-NUM = '' .

IF >= RTAB2 .

DELETE ITAB2 INDEX SY-TABIX .

ELSE .

= RTAB2 .

DELETE ITAB2 INDEX SY-TABIX .

ENDIF.

ENDIF.

ENDLOOP .

***打印出来看看吧

LOOP AT ITAB2 INTO RTAB2 .

WRITE: / RTAB2-NUM ,RTAB2-0 ,RTAB2-1,RTAB2-2 ,RTAB2-3,RTAB2-4,RTAB2-5,

RTAB2-6,RTAB2-7,RTAB2-8,RTAB2-9 .

ENDLOOP .

你可能感兴趣的:(abap)