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

比如:你的内表如图:

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

那么完成之后会是这样:

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

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. android源码GIT下载

    mkdir device cd device git clone https://android.googlesource.com/device/common.git mkdir htc cd htc ...

  2. 使用MySQL

    安装MySQL驱动 使用vpn $ pip install mysql-connector-python --allow-external mysql-connector-python import ...

  3. ☀【Node】处理POST请求

    Node入门 √http://www.nodebeginner.org/index-zh-cn.html index.js var server = require("./server&qu ...

  4. PHP搭建OAuth2.0

    这几天一直在搞OAuth2.0的东西,写SDK啥的,为了更加深入的了解服务端的OAuth验证机制,就自己动手搭了个php下OAuth的环境,并且将它移植到了自己比较熟的tp框架里. 废话不多说,开动. ...

  5. HDU 5534 Partial Tree 完全背包

    一棵树一共有2*(n-1)度,现在的任务就是将这些度分配到n个节点,使这n个节点的权值和最大. 思路:因为这是一棵树,所以每个节点的度数都是大于1的,所以事先给每个节点分配一度,答案 ans=f[1] ...

  6. Excel2010: Excel使用小技巧(不断更新)

    目录 1. 如何设置定时保存2. 调出“开发工具”功能区3. 在Excel单元格中输入对号和错号4. 设置单元格自动换行5. 向Excel中导入.txt文件6. 如何批量删除超链接7. 如何冻结窗格8 ...

  7. CentOS 7.0 安装 python3.X 脚本

    #!/bin/sh #第一个Linux下的脚本,太多不明白的地方,只是依着网上的例子照葫芦画瓢,能正常运行即可 #运行环境 CentOS 7.0 版本 #首行指定程序的路径,以#号开头的行是注释行 # ...

  8. (Trie) uvalive 3942 Remember the word

    题意:告诉你一个母串和子串,能用多少种不同的方案组合出母串. 思路:字典树(显然)+DP DP: dp[i]+=dp[j+1]  i<=j<=m-1,且i到j的字符串能在字典树中找到.也就 ...

  9. minicom 没有tx 信号

    在minicom -s 的配置中:——> Serial port setup -->  选择F - Hardware Flow Control : No默认是yes, 但是没有tx信号输出 ...

  10. HW6.4

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...