2019.12.05【ABAP随笔】 分组循环(LOOP AT Group) / REDUCE
ABAP 7.40新语法 LOOP AT Group 和 REDUCE
*LOOP AT itab result [cond] GROUP BY key ( key1 = dobj1 key2 = dobj2 …
* [gs = GROUP SIZE] [gi = GROUP INDEX] )
* [ASCENDING|DESCENDING [AS TEXT]]
* [WITHOUT MEMBERS]
* [{INTO group}|{ASSIGNING <group>}]
* …
* [LOOP AT GROUP group|<group>
* …
* ENDLOOP.]
* …
*ENDLOOP.
*
*… REDUCE type(
*INIT result = start_value
* …
*FOR for_exp1
*FOR for_exp2
*…
*NEXT …
* result = iterated_value
*… ) "首先创建一个内表
TYPES:BEGIN OF ty_data,
id TYPE i, "人员ID
name TYPE char10, "人员名称
country TYPE char10, "国家
language TYPE char2, "语言
age TYPE i,
END OF ty_data,
ty_t_data TYPE STANDARD TABLE OF ty_data WITH EMPTY KEY. "数据
DATA(gt_data) = VALUE ty_t_data(
( id = name = 'Jerry' country = 'China' language = 'ZH' age = )
( id = name = 'Jack' country = 'China' language = 'ZH' age = )
( id = name = 'Nick' country = 'Korea' language = 'EN' age = )
( id = name = 'Rossi' country = 'Korea' language = 'EN' age = )
( id = name = 'Randy' country = 'Korea' language = 'EN' age = )
( id = name = 'Tab' country = 'China' language = 'ZH' age = )
( id = name = 'Lily' country = 'Korea' language = 'EN' age = )
( id = name = 'Lucy' country = 'China' language = 'EN' age = )
( id = name = 'Zera' country = 'China' language = 'EN' age = )
( id = name = 'Grace' country = 'China' language = 'EN' age = )
)
. "REDUCE
"1计算年龄最大
DATA(lv_age_max_zh) = REDUCE i( INIT x = FOR lw_data IN gt_data
WHERE ( language = 'ZH' ) NEXT x = nmax( val1 = x
val2 = lw_data-age )
) .
WRITE:/ |说中文的人中年龄最大的是:{ lv_age_max_zh } |. "2.输出的reduce
TYPES:outref TYPE REF TO if_demo_output.
DATA(output) = REDUCE outref( INIT out = cl_demo_output=>new( )
text = 'Count up:'
FOR n = UNTIL n >
NEXT out = out->write( text )
text = | { n } | ).
output->display( ). "分组循环
"1.ls_data这个工作区里面是没有内容的
"2.<group>里面只有size index 和分组参数
LOOP AT gt_data INTO DATA(ls_data) GROUP BY ( country = ls_data-country language = ls_data-language
size = GROUP SIZE index = GROUP INDEX ) ASCENDING ASSIGNING FIELD-SYMBOL(<group>). WRITE:/ |Group:{ <group>-index } Country :{ <group>-country } language : { <group>-language }| &
| Number lines :{ <group>-size } |. "3.按照<group>中的分组参数循环 GT_data中的数据
LOOP AT GROUP <group> ASSIGNING FIELD-SYMBOL(<ls_member>). WRITE:/ | Name:{ <ls_member>-name } |. ENDLOOP. DATA(lv_age_max) = REDUCE i( INIT max = FOR lw_member IN GROUP <group>
NEXT max = nmax( val1 = max val2 = lw_member-age ) ). DATA(lv_age_min) = REDUCE i( INIT min = FOR lw_member IN GROUP <group>
NEXT min = nmin( val1 = min val2 = lw_member-age ) ). DATA(lv_age_sum) = REDUCE i( INIT sum = FOR lw_member IN GROUP <group>
NEXT sum = sum + lw_member-age ).
DATA(lv_age_avg) = lv_age_sum / <group>-size. WRITE:/ | 该组最大年龄,最小年龄和平均年龄分别为:{ lv_age_max } { lv_age_min } { lv_age_avg } |.
ENDLOOP.
结果为:
个人感觉LOOP AT GROUP 和 REDUCE可以很好的代替 LOOP 中使用 AT END OF field 和 AT NEW field ( 这个是需要调整内表结构字段顺序的)。
平时用在分组求和,分组操作的时候还是很好用的。
-TAB 热爱技术 享受生活
2019.12.05【ABAP随笔】 分组循环(LOOP AT Group) / REDUCE的更多相关文章
- 2019.06.05 ABAP EXCEL 操作类代码 OLE方式(模板下载,excel上传,内表下载)
一般使用标准的excel导入方法9999行,修改了标准的excel导入FM 整合出类:excel的 模板下载,excel上传,ALV内表下载功能. 在项目一开始可以SE24创建一个类来供整体开发使用, ...
- 【2019年05月20日】A股滚动市盈率PE历史新低排名
2010年01月01日 到 2019年05月20日 之间,滚动市盈率历史新低排名. 上市三年以上的公司, 2019年05月20日市盈率在300以下的公司. 1 - 阳光照明(SH600261) - 历 ...
- Atitit 循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate).
Atitit 循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate). 1.1. 循环算是最基础的概念, 凡是重复执行一段代码, 都可以称之为循环. ...
- 循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate)的区别
表示“重复”这个含义的词有很多, 比如循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate). 循环算是最基础的概念, 凡是重复执行一段代码, 都可以称 ...
- app后端设计(11)-- 系统架构(2014.12.05更新)
个人认为,在小型的创业团队中,特别是以应用产品为主,在架构后台的时候,需要集中精力解决自身业务上的问题,不是花时间解决第三方已经解决的问题,简单点来说,就是能用第三方服务就使用第三方的服务.基于这个原 ...
- app后端设计(3)--短信,邮件,推送服务(2014.12.05更新)
在app的后端设计中,免不了消息的推送,短信,邮件等服务,下面就个人的开发经验谈谈这方面. (1)最重要的是,各种推送一定要放在队列系统中处理,不然会严重影响api的响应时间. (2)短信方面 以前我 ...
- 003_循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate)的区别
表示“重复”这个含义的词有很多, 比如循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate). 循环算是最基础的概念, 凡是重复执行一段代码, 都可以称 ...
- NOI2019退役记 upd:2019.12.1
(我把原来写的东西全部删掉了) AFO. 我退役了,\(\mbox{yyb}\)退役了. 至少,在接下来的日子里,我得投身到文化课,度过快乐的高三生活了. 这两年的\(OI\)生涯给了我很多,让我学会 ...
- 2019.07.05 纪中_B
今日膜拜:czj大佬orz%%% 2019.07.05[NOIP提高组]模拟 B 组 今天做题的时候大概能判断出题人的考点,可是就是没学过...特别痛苦 T0:栈的定义,模拟就好了T1:感觉像是找规律 ...
随机推荐
- IDEA利用mybatis-generator自动生成dao和mapper
pom.xml配置 <properties> <java.version>1.8</java.version> <mybatis-generator-core ...
- Python Module模块
模块 https://docs.python.org/zh-cn/3/tutorial/modules.html 模块的概念被高级语言广泛使用. Python的定义 一个包括Python定义和语句的文 ...
- IntelliJ IDEA 项目同步至GitHub
第一步:下载对应电脑版本的git客户端,安装好,傻瓜式下一步就行. 第二步:在idea里设置github地址和git地址 可以点击Test测试一下是否配置正确,如果提示成功,就是配置OK.如果失败,检 ...
- 虚拟dom比对原理
dom对比步骤 1.用js对象来表达dom结构 tagName 标签名props 元素属性key 唯一标识children 子元素,格式和父元素一样count 有几个子元素,用于计算当前元素的索引,处 ...
- 08-sp_who2和inputbuffer的使用,连接数
一.sp_who2的使用 1.存储过程的位置 sp_who官方解释地址:https://docs.microsoft.com/zh-cn/sql/relational-databases/system ...
- hive日期函数-Demo(二)
需求:某资产近一个月的资产值 比如:今天是2018年2月28日,近一个月若是按照自然月来算,那么是2018年2月1日至2018年2月28日.最终需要的日期格式为:yyyyMMdd. 当日时间戳 uni ...
- es6 模块编译 *** is not function
今天学习vuejs,里面用到了es6的写法,遇到了一个很怪的问题,不知道有人遇到么. 安装的模块引用:import Vue from 'vue';(注意,Vue处没有{},如果加上这个就报错Uncau ...
- ckeditor+粘贴word
最近公司做项目需要实现一个功能,在网页富文本编辑器中实现粘贴Word图文的功能. 我们在网站中使用的Web编辑器比较多,都是根据用户需求来选择的.目前还没有固定哪一个编辑器 有时候用的是UEditor ...
- List集合、泛型、装箱拆箱
1.List集合 Vector:增删改查都慢 线程同步 线程安全 LlinkedList:以链表结构存储数据,查询慢.增删快 ArrayList:的运行速度比较快 连续数据空间存储数据,查询快(下标) ...
- hdu 5834 四面体 观察+暴力
Magic boy Bi Luo with his excited tree Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 13107 ...