把内表的行列转换,网上的例子很多,但是新人想看懂,几乎很难,所以总结下我是怎么完成的。

比如:你的内表如图:

你想让内表最后展示成这样:如图:

那么完成之后会是这样:

完成这个过程,得用到动态内表。看代码:

DATA:BEGIN OF itab8 OCCURS ,
bezei LIKE zchannel-bezei, "销售办事处
zdate LIKE zchannel-zdate, "日期
salesamount LIKE zchannel-salesamount, "总额
END OF itab8.

先排序:

  SORT itab8 BY bezei zdate DESCENDING.

要以日期作为列,得先取得唯一的日期。

DATA TDATE LIKE SY-DATUM OCCURS  WITH HEADER LINE.
LOOP AT itab8.
TDATE = ITAB8-ZDATE.
COLLECT TDATE.
ENDLOOP.

下面构建动态内表结构

  DATA: dy_table TYPE REF TO data,
dy_wa TYPE REF TO data,
it_str TYPE lvc_t_fcat, "是Table Type
wa_str TYPE lvc_s_fcat. "是一个Structure 用于存储即将构建的动态内表结构 FIELD-SYMBOLS: <dyn_table> TYPE table, "是一个标志,可以理解为一个指针,将来创建的内表就要通过它们来访问
<dyn_wa> TYPE ANY,
<FS> TYPE ANY. wa_str-fieldname = 'BEZEI'.
wa_str-col_pos = .
wa_str-inttype = 'CHAR'.
wa_str-intlen = .
APPEND wa_str TO it_str.
CLEAR wa_str. wa_str-fieldname = 'SELFI'.
wa_str-col_pos = .
wa_str-inttype = 'CHAR'.
wa_str-intlen = .
APPEND wa_str TO it_str.
CLEAR wa_str. REFRESH fieldcat.
PERFORM input_fieldcat USING 'BEZEI' '销售办事处' '' '' '' '' ''. LOOP AT TDATE.
wa_str-fieldname = TDATE.
wa_str-col_pos = .
wa_str-inttype = 'CHAR'.
wa_str-intlen = .
APPEND wa_str TO it_str.
CLEAR wa_str.
PERFORM input_fieldcat USING TDATE TDATE '' '' '' '' ''.
ENDLOOP. *此方法用于构建动态内表,输入=构建的结构,输出=dy_table
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = it_str
IMPORTING
ep_table = dy_table. ASSIGN dy_table->* TO <dyn_table>.
CREATE DATA dy_wa LIKE LINE OF <dyn_table>.
ASSIGN dy_wa->* TO <dyn_wa>.

下面往结构里写数

   DATA FIELDNAME().
LOOP AT ITAB8.
ASSIGN COMPONENT 'BEZEI' OF STRUCTURE <dyn_wa> TO <FS>. "分配结构里的销售办事处,用FS字段 指向它
<FS> = ITAB8-BEZEI.
FIELDNAME = ITAB8-ZDATE. "这里把日期类型定义为char型,因为用DATS报错。
ASSIGN COMPONENT FIELDNAME OF STRUCTURE <dyn_wa> TO <FS>. "分配结构的日期,将FS指向它
<FS> = ITAB8-SALESAMOUNT.
AT END OF BEZEI.
APPEND <dyn_wa> TO <dyn_table>.
ENDAT.
ENDLOOP.

转ABAP将内表行列转换实例(动态内表) .的更多相关文章

  1. SQL(横表和纵表)行列转换,PIVOT与UNPIVOT的区别和使用方法举例,合并列的例子

    使用过SQL Server 2000的人都知道,要想实现行列转换,必须综合利用聚合函数和动态SQL,具体实现起来需要一定的技巧,而在SQL Server 2005中,使用新引进的关键字PIVOT/UN ...

  2. [数据库] SQL查询语句表行列转换及一行数据转换成两列

    原文来自:http://blog.csdn.net/Eastmount/article/details/50559008 本文主要讲述了SQL查询语句表之间的行列转换,同时也包括如何将一行数据转换成两 ...

  3. sql的存储过程实例--动态根据表数据复制一个表的数据到另一个表

    动态根据表数据复制一个表的数据到另一个表 把track表的记录 根据mac_id后两位数字,复制到对应track_? 的表中 如:mac_id=12345678910,则后两位10 对应表为track ...

  4. 通过sql做数据透视表,数据库表行列转换(pivot和Unpivot用法)(一)

    在mssql中大家都知道可以使用pivot来统计数据,实现像excel的透视表功能 一.MSsqlserver中我们通常的用法 1.Sqlserver数据库测试 ---创建测试表 Create tab ...

  5. ABAP 内表的行列转换-发货通知单-打印到Excel里-NEW-(以运单号为单位显示ALV然后保存输出)

    *********************************************************************** * Title           : ZSDF003  ...

  6. ABAP 内表的行列转换-发货通知单-打印到Excel里-NEW

    *********************************************************************** * Title           : ZSDF002  ...

  7. ABAP 内表的行列转换-发货通知单-打印到Excel里

    需要传入数据到Excel里的模板如上图所示 ********************** *           设计主要逻辑与原理说明                                 ...

  8. ABAP 内表的行列转换-发货通知单2

    *&---------------------------------------------------------------------* *& Report  Z_TEST_C ...

  9. ABAP 内表的行列转换-发货通知单-SLIS

    REPORT Z_TEST_COL_TO_ROW. TYPE-POOLS: slis. TABLES: VTTP,LIPS,LIKP,KNA1 ,VTTK. DATA: gd_fieldcat TYP ...

随机推荐

  1. web框架之Spring-MVC环境搭建

    spring框架配置 1.web.xml配置 <?xml version="1.0" encoding="UTF-8"?> <web-app ...

  2. HDU 5007 Post Robot

    Post Robot Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  3. C++ 文件操作(CFile类)

    原文:文件操作(CFile),C吉羊 一.Visual C++编程文件操作 有如下方法可进行操作: (1)使用标准C运行库函数,包括fopen.fclose.fseek等. (2)使用Win16下的文 ...

  4. UPC OJ 一道水题 STL

    Problem C: 字符串游戏 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 10  Solved: 3 [Submit][Status][Web ...

  5. POJ 1113&&HDU 1348

    题意:凸包周长+一个完整的圆周长.因为走一圈,经过拐点时,所形成的扇形的内角和是360度,故一个完整的圆. 模板题,之前写的Graham模板不对,WR了很多发....POJ上的AC代码 #includ ...

  6. 深入理解Linux的系统调用【转】

    一. 什么是系统调用 在Linux的世界里,我们经常会遇到系统调用这一术语,所谓系统调用,就是内核提供的.功能十分强大的一系列的函数.这些系统调用是在内核中实现的,再通过一定的方式把系统调用给用户,一 ...

  7. HW7.10

    public class Solution { public static void main(String[] args) { int[][] array = new int[3][3]; for( ...

  8. Javascript and DOM学习

    1.输出 document.write.(); 2.alert警告 3.confirm消息对话框:当用户点击"确定"按钮时,返回true,取消时,返回false 4.prompt提 ...

  9. jqgrid 中设置列不排序

    背景 今天在做系统的功能时,当时有这么个需求:在添加了一行数据时,原本的排序的自动就不能再排序,也就是排序失效. 1. 使用onSortCol事件禁止排序列 当时使用了初始化时,使用onSortCol ...

  10. RDMA编程实例

    1,RDMA verbs Multicast Code for Multicast Using RDMA_CM(Remote directory memory access_connect manag ...