LOOP GROUP BY 分组循环的使用方法小栗子
2024-09-08 19:27:04
原文链接:https://blog.csdn.net/lmf496891416/article/details/111317377
1.格式:
LOOP AT 内表 INTO DATA(工作区) GROUP BY ( 字段 = 工作区-字段
size = GROUP SIZE "分组组数--
index = GROUP INDEX ) "分组的组序号
ASCENDING ASSIGNING FIELD-SYMBOL(<组>). LOOP AT GROUP <组> ASSIGNING FIELD-SYMBOL(<指针>).
"对指针进行操作,和普通的loop循环相似
ENDLOOP. ENDLOOP.
2.简而言之:就是第一个loop循环是把内表进行分组,第二loop循环是把组里的数据循环读出来进行修改判断等操作。
3.可以替代AT END OF /AT NEW OF。
4.具体实例-复制就能用
TYPES: BEGIN OF ty_employee,
name TYPE char30,
role TYPE char30,
age TYPE i,
sex TYPE char10,
END OF ty_employee,
ty_employee_t TYPE STANDARD TABLE OF ty_employee WITH KEY name.
"对内表进行赋值"
DATA(gt_employee) = VALUE ty_employee_t(
( name = 'John' role = 'ABAP guru' age = 34 sex = 'MAN' )
( name = 'Alice' role = 'FI Consultant' age = 42 sex = 'WOMAN' )
( name = 'Barry' role = 'ABAP guru' age = 54 sex = 'WOMAN' )
( name = 'Mary' role = 'FI Consultant' age = 37 sex = 'WOMAN' )
( name = 'Arthur' role = 'ABAP guru' age = 34 sex = 'MAN' )
( name = 'Mandy' role = 'SD Consultant' age = 64 sex = 'MAN' ) ). DATA: gv_tot_age TYPE i,
gv_avg_age TYPE decfloat34.
"通过角色进行分组"
LOOP AT gt_employee INTO DATA(ls_employee) GROUP BY ( role = ls_employee-role
size = GROUP SIZE "分组组数"
index = GROUP INDEX ) "分组的组序号"
ASCENDING ASSIGNING FIELD-SYMBOL(<group>). CLEAR: gv_tot_age.
WRITE: / | 组序号: { <group>-index } 角色: { <group>-role WIDTH = 15 }|
& | 这个组有几条数据: { <group>-size } |.
"loop循环组,将组里的数据读出来"
LOOP AT GROUP <group> ASSIGNING FIELD-SYMBOL(<ls_member>).
gv_tot_age = gv_tot_age + <ls_member>-age.
WRITE: /13 <ls_member>-name .
ENDLOOP. gv_avg_age = gv_tot_age / <group>-size.
WRITE: / |组平均年龄: { gv_avg_age }|.
SKIP.
ENDLOOP.
实例最终结果图:
最新文章
- NAT技术
- Jenkins环境拓扑及部署流程
- LabVIEW串口通信
- ANSI C中关于FILE流的一些
- 未能加载文件或程序集“ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=n
- Linux下运行jar包
- Windows下的cmd命令行中设置环境编码
- ChatForFun 公众号使用说明
- Android 怎样把光标放在EditText中文本的末尾处?
- 【笨嘴拙舌WINDOWS】窗体样式
- Qt获得网页源码
- E212: 不能以写入模式打开 linux
- 前端开发之JavaScript篇
- SDP(2):ScalikeJDBC-Connection Pool Configuration
- linux:如何指定进程运行的CPU
- JavaScript里面的arguments到底是个啥?
- c# System.Console
- async与await线程分配研究
- python 使用多线程进行并发编程/互斥锁的使用
- introsort(内省排序)