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:感觉像是找规律 ...
随机推荐
- POM标签大全详解
父(Super) POM <project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "htt ...
- Some notes of The Peter Principle
管理学读书笔记之彼得原理 chapter0 绪论为什么有这么多不称职现象?姑息错误或纵容懒惰.偶然事故都不是问题根源,关键是我们的社会为不称职现象提供土壤,并对其有所鼓励. chapter1 彼得原理 ...
- python中_、__、__xx__(单下划线、双下划线等)的含义
(1)_xxx "单下划线 " 开始的成员变量相当于私有变量,也叫做保护变量,意思是只有类实例和子类实例能访问到这些变量,需通过类提供的接口进行访问(可以定义有点像java中的ge ...
- 如何使用Laravel Debugbar?
非常好用的Laravel debug工具,一定要安装 Chrome/FireFox 都会自带一些 debug 工具可以帮助我们 debug 前端,如 CSS.JavaScript… 等,但若要 deb ...
- 51nod 1850 抽卡大赛 (十二省联考模测) DP
O(n4)O(n^4)O(n4)的DP很好想,但是过不了.来看看O(n3)O(n^3)O(n3)的把. Freopen的博客 CODE #include <cstdio> #include ...
- Luogu P4331 [BOI2004]Sequence 数字序列 (左偏树论文题)
清晰明了%%% Fairycastle的博客 个人习惯把size什么的存在左偏树结点内,这样在外面好写,在里面就是模板(只用修改update). 可以对比一下代码(好像也差不多-) MY CODE # ...
- kafka的maxPollIntervalMs设置太小引发的惨案 (转)
本地启动kafka后,不断报一下信息: 表示本地consumer节点在不断的重新加入group,并且不断伴随着offset commit失败. 具体原因是因为ConsumerCoordinator没有 ...
- hdu 6052 To my boyfriend
题目 OvO click here http://acm.hdu.edu.cn/showproblem.php?pid=6052 (2017 Multi-University Training Con ...
- Vue_(基础)Vue中的指令
Vue.js中文文档 传送门 Vue的指令:其实就是单个JavaScript表达式,一般来说是带有v-前缀 Vue指令: v-model:数据双向绑定: v-text:以纯文本方式显示数据: v- ...
- python-matplotlib-ERROR
在导入包显示画图时,出错:ImportError: No module named '_tkinter 解决办法:通常原因是tkinter和tk-devel缺失 ERROR: matplotlib的图 ...