ABAP_DEMO篇33 SUM和COLLECT的用法
ABAP程序内表中的数量和金额字段 经常会需要合计, SUM和COLLECT 语法都能实现对数量和金额字段的合计。
1. SUM语法
ABAP中SUM语句比不上EXCEL里的强大;
SUM只能在loop循环中使用,一般和AT-ENDAT配合使用。
使用SUM语句的先决条件包含在loop中使用加法INTO,以及指定的工作区域wa与内部表的行类型兼容。此外,当内部表itab的行类型包含表组件时,不能使用SUM。
DEMO
DATA:
BEGIN OF wa,
col1 TYPE i,
col2 TYPE i,
END OF wa,
itab LIKE TABLE OF wa WITH EMPTY KEY. itab = VALUE #( FOR i = UNTIL i >
FOR j = UNTIL j > i
( col1 = i col2 = j ) ). LOOP AT itab INTO wa.
AT END OF col1.
SUM.
cl_demo_output=>write( wa ).
ENDAT.
ENDLOOP.
cl_demo_output=>display( wa ).
内表ITAB中有15行数据

显示:

2. COLLECT语法
语法:COLLECT wa INTO itab [result].
此语句将工作区域的内容作为内部表itab中的单行插入,或者将其数值组件的值添加到具有相同主表键的现有行的对应值中。会对 数值型字段:I 类型, QUAN 类型,CURR类型的字段做汇总,字符型字段视为汇总条件,所以COLLECT 一般是用内表中的字符型字段作为KEY值 做汇总。
*&---------------------------------------------------------------------*
*& Report YCX_COLLECT1
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ycx_collect1. TYPES:
BEGIN OF line,
key TYPE c LENGTH ,
num TYPE i,
END OF line.
DATA
itab TYPE SORTED TABLE OF line
WITH UNIQUE KEY key. DATA(rnd) = cl_abap_random_int=>create( seed = + sy-uzeit
min =
max = ). DO.
COLLECT VALUE line( key = COND #( LET r = rnd->get_next( ) IN
WHEN r = THEN 'X'
WHEN r = THEN 'Y'
WHEN r = THEN 'Z' )
num = ) INTO itab
ASSIGNING FIELD-SYMBOL(<fs>).
IF <fs>-num = .
EXIT.
ENDIF.
ENDDO. cl_demo_output=>display( itab ).


再比如,通过工厂,物料汇总数量
DATA: BEGIN OF i_mi OCCURS ,
matnr LIKE zhkmi-matnr,
werks LIKE zhkmi-werks,
menge LIKE zhkmi-menge,
END OF i_mi. START-OF-SELECTION. SELECT matnr werks menge
INTO CORRESPONDING FIELDS OF TABLE i_mi
FROM zhkmi. SORT i_mi BY matnr werks. LOOP AT i_mi.
i_collect-zkind = 'P'.
i_collect-matnr = i_mi-matnr.
i_collect-werks = i_mi-werks.
i_collect-menge = i_mi-menge.
COLLECT i_collect.
CLEAR i_collect.
ENDLOOP.
做个简单例子展示 sum和collect 实现汇总:

*&---------------------------------------------------------------------*
*& Report YCX_SUM
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ycx_sum. DATA: BEGIN OF line,
col1 TYPE c,
col2 TYPE i,
END OF line.
DATA: itab LIKE line OCCURS ,
lt_collect LIKE line OCCURS WITH HEADER LINE. DO TIMES.
line-col1 = sy-index.
line-col2 = sy-index ** .
APPEND line TO itab.
ENDDO. **显示内表数据
LOOP AT itab INTO line.
WRITE: / line-col1, line-col2.
ENDLOOP. WRITE:/'SUM汇总数据'.
**使用SUM 汇总
LOOP AT itab INTO line.
AT END OF col1.
SUM.
WRITE: / line-col1, line-col2.
ENDAT.
ENDLOOP. WRITE:/'SUM汇(不使用AT END OF)'.
**使用SUM 汇总
LOOP AT itab INTO line.
SUM.
WRITE: / line-col1, line-col2.
ENDLOOP. **使用COLLECT 汇总
LOOP AT itab INTO line.
lt_collect-col1 = line-col1.
lt_collect-col2 = line-col2.
COLLECT lt_collect.
CLEAR: lt_collect.
ENDLOOP.
WRITE:/'COLLECT汇总数据'. LOOP AT lt_collect.
WRITE: / lt_collect-col1, lt_collect-col2.
ENDLOOP.
ABAP_DEMO篇33 SUM和COLLECT的用法的更多相关文章
- mysql sum() 求和函数的用法
查询在record表中 name=? 的 money 加起来的值使用聚和函数 sum() 求和select sum(money) from record t where t.name = ?另外:co ...
- ORACLE PL/SQL开发--bulk collect的用法 .
刚刚在inthirties老大的博客里看到这篇文章,写的不错,正好自己最近在学习PL/SQL,转过来学习学习. ============================================ ...
- (转载)OC学习篇之---协议的概念和用法
在前一篇文章中我们介绍了OC中类的延展,这一篇文章我们在来看一下OC中协议的概念以及用法,协议也是OC中的一个重点,Foundation框架以及我们后面在写代码都会用到. OC中的协议就是相当于Jav ...
- Oracle分析函数 — sum, rollup, cube, grouping用法
本文通过例子展示sum, rollup, cube, grouping的用法. //首先建score表 create table score( class nvarchar2(20), course ...
- ABAP中Collect的用法
vaule:collect在非数值字段相同的情况下,起到了数值字段汇总作用. 非数值字段不同的情况下,效果和append相同执行插入内表操作,当非数值字段相同的时候,则相当于modify的效果,只不过 ...
- oracle中bulk collect into用法
通过bulk collect减少loop处理的开销 采用bulk collect可以将查询结果一次性地加载到collections中. 而不是通过cursor一条一条地处理. 可以在select in ...
- (高级篇)jQuery学习之jQuery Ajax用法详解
jQuery Ajax在web应用开发中很常用,它主要包括有ajax,get,post,load,getscript等等这几种常用无刷新操作方法,下面我来给各位同学介绍介绍. 我们先从最简单的方法看起 ...
- OC学习篇之---协议的概念和用法
这一篇文章我们在来看一下OC中协议的概念以及用法,协议也是OC中的一个重点,Foundation框架以及我们后面在写代码都会用到. OC中的协议就是相当于Java中的接口(抽象类),只不过OC中的名字 ...
- ASP.NET Core 6框架揭秘实例演示[33]:异常处理高阶用法
NuGet包"Microsoft.AspNetCore.Diagnostics"中提供了几个与异常处理相关的中间件,我们可以利用它们将原生的或者定制的错误信息作为响应内容发送给客户 ...
随机推荐
- Docker-Compose搭建单体SkyWalking 6.2
SkyWalking简介 SkyWalking是一款高效的分布式链路追踪框架,对于处理分布式的调用链路的问题定位上有很大帮助 有以下特点: 性能好 针对单实例5000tps的应用,在全量采集的情况下, ...
- java中System.err.print和System.out.print区别
System.err.print 是报错专用输输出,有颜色标记,所有err打印的都在顶行输出 System.out.print 是标准输出,白底黑字 package iobuffer; pu ...
- jwt的简单使用
目录 简介 java版本 golang版本 简介 使用jwt对数据进行存储加密,分为java和golang版本. java版本 maven配置 <dependency> <group ...
- linux权限管理(chown、chgrp、chomd)
一.文件权限 我们以/etc/passwd 文件为例,用ll长列出其属性如下所示 ll /etc/passwd 每个文件针对每类访问访问者都定义了三种权限 文件类型中: p:表示命名管道文件 d:表示 ...
- 使用SqlConnectionStringBuilder构造数据库连接字符串
在实际开发过程中,很多时候会拷贝一个现有的数据库连接字符串,修改对应的数据库名.用户名.密码等配置成新的数据库连接字符串.但是有时候我们需要增加一些额外的配置,比如超时时间,最大连接池等,此时我们可以 ...
- Openfire Meetings插件是一个包含各种Jitsi项目(如VideoBridge和Meet)的实现
Openfire Meetings插件是一个包含各种Jitsi项目(如VideoBridge和Meet)的实现.要创建与Openfire Meetings一起使用的本机客户端,建议使用Jitsi项目提 ...
- IT之快速提高效率的方法与思考
前言 文章也没什么很高深的问题,大概花个5分钟能看完.是一些大家都知道的道理,作为提醒与总结. 关于提高方面的内容,一般都有个人的方法,但大致都一致.可分为几个步骤. 框架.工具使用相关 使用框架.工 ...
- 《微信小程序项目开发实战:用WePY、mpvue、Taro打造高效的小程序》(笔记1)WePY开发环境的安装
WePY的安装或更新都通过npm进行,全局安装或更新WePY命令行工具,使用以下命令: npm install wepy-cli -g 稍等片刻,成功安装后,即可创建WePY项目. 注意:如果npm安 ...
- java集合学习(2):Map和HashMap
Map接口 java.util 中的集合类包含 Java 中某些最常用的类.最常用的集合类是 List 和 Map. Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含 ...
- Webpack如何配置sourceMap
前言:在写这篇文章之前,我必须要吐槽一下webpack了.特别喜欢更新版本,更新就算了,文档还跟不上.文档真的让人迷惑了,大爷的. 背景:由于我正在写sourceMap反向定位源码的功能,所以最近需要 ...