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的更多相关文章

  1. 2019.06.05 ABAP EXCEL 操作类代码 OLE方式(模板下载,excel上传,内表下载)

    一般使用标准的excel导入方法9999行,修改了标准的excel导入FM 整合出类:excel的 模板下载,excel上传,ALV内表下载功能. 在项目一开始可以SE24创建一个类来供整体开发使用, ...

  2. 【2019年05月20日】A股滚动市盈率PE历史新低排名

    2010年01月01日 到 2019年05月20日 之间,滚动市盈率历史新低排名. 上市三年以上的公司, 2019年05月20日市盈率在300以下的公司. 1 - 阳光照明(SH600261) - 历 ...

  3. Atitit  循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate).

    Atitit  循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate). 1.1. 循环算是最基础的概念, 凡是重复执行一段代码, 都可以称之为循环. ...

  4. 循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate)的区别

    表示“重复”这个含义的词有很多, 比如循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate). 循环算是最基础的概念, 凡是重复执行一段代码, 都可以称 ...

  5. app后端设计(11)-- 系统架构(2014.12.05更新)

    个人认为,在小型的创业团队中,特别是以应用产品为主,在架构后台的时候,需要集中精力解决自身业务上的问题,不是花时间解决第三方已经解决的问题,简单点来说,就是能用第三方服务就使用第三方的服务.基于这个原 ...

  6. app后端设计(3)--短信,邮件,推送服务(2014.12.05更新)

    在app的后端设计中,免不了消息的推送,短信,邮件等服务,下面就个人的开发经验谈谈这方面. (1)最重要的是,各种推送一定要放在队列系统中处理,不然会严重影响api的响应时间. (2)短信方面 以前我 ...

  7. 003_循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate)的区别

    表示“重复”这个含义的词有很多, 比如循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate). 循环算是最基础的概念, 凡是重复执行一段代码, 都可以称 ...

  8. NOI2019退役记 upd:2019.12.1

    (我把原来写的东西全部删掉了) AFO. 我退役了,\(\mbox{yyb}\)退役了. 至少,在接下来的日子里,我得投身到文化课,度过快乐的高三生活了. 这两年的\(OI\)生涯给了我很多,让我学会 ...

  9. 2019.07.05 纪中_B

    今日膜拜:czj大佬orz%%% 2019.07.05[NOIP提高组]模拟 B 组 今天做题的时候大概能判断出题人的考点,可是就是没学过...特别痛苦 T0:栈的定义,模拟就好了T1:感觉像是找规律 ...

随机推荐

  1. poj1734 Sightseeing trip[最小环]

    一个最小环裸题.最小环的两种求法dijkstra和Floyd直接参见这里我就是从这里学的,不想写了. 注意这里最重要的一个点是利用了Floyd的dp过程中路径上点不超过$k$这一性质,来枚举环上最大编 ...

  2. mysql中给查询结果添加序号列

    今天同事给了一个小需求,从一个存有不定数量坐标数据的表(map_trace)中每隔20条取一条.最后写了下面这条SQL: select * from (select @n:=@n+1 as n, a. ...

  3. hive三种调用方式

    一.hive -e ‘sql语句’ (shell命令) 适合比较短的sql语句调用,优点是可以直接在shell中调用静音模式 -S 在执行HiveQL过程中,不在显示器输出MR的执行过程hive -S ...

  4. django之ajax结合sweetalert使用,分页器和bulk_create批量插入 07

    目录 sweetalert插件 bulk_create 批量插入数据 分页器 简易版本的分页器的推导 自定义分页器的使用(组件) sweetalert插件 有这么一个需求: ​ 当用户进行一个删除数据 ...

  5. “我”这个字的unicode码到底是25105

    “我”这个字的unicode码到底是25105 “我”这个字的unicode码到底是25105 “我”这个字的unicode码到底是25105

  6. JavaScript算术运算符

    ㈠运算符(操作符) ⑴通过运算符可以对一个或多个值进行运算,并获取运算结果 ⑵比如:typeof就是运算符,可以来获得一个值得类型               它会将该值的类型以字符串的形式返回   ...

  7. 与word、excel交互问题总结

    不同版本的Office对应的型号不同,往往问题出现在注册表中有多个版本,所以程序运行经常提示错误. 1.找不到引用microsoft.office.core解决办法 (引用中有感叹号,说明引用不成功) ...

  8. virtualbox使用xshell配置以及共享文件夹设置

    1.virtualbox NAT网络配置后,host xshell访问 设置映射 登陆: ssh 127.0.0.1 2.virtualbox共享文件(host---->guest) 1.安装增 ...

  9. 2019.12.12网页设计大赛&2019.12.13程序设计大赛观后感

    有幸参加了一次网页设计大赛和程序设计大赛,其实在大一的时候就参加过一次程序设计大赛,那时候也没怎么听,现在又有了一次机会来听,这次就认真的听了这两次的比赛,也有很多的感悟. 1.要学习完成一个任务的多 ...

  10. 认识并安装RabbitMQ(以Windows系统为例)

    一.初识RabbitMQ 百度百科有这么一句话: MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息, 而另一端则可以读取或者订阅队列中的消息. MQ和JMS类似,但不同的是JMS是 ...