开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第16天,点击查看活动详情
序
HELLO ,这里是百里,一个学习中的ABAPER,ABAP语言是一门神奇的语言,他sql分成两种,一种操作数据库,一种操作内表.没错在别的语言中你绝对没听过一种叫做内表的东西.你可以理解为自定义一个变量,然后你可以操作对应的变量内表数据.或者可以理解为excel 中的对应的SHEET .扯远了,我们今天说的是内表的去重方式 .
什么是数据去重
举个例子,就像excel两行中有出现相同的数据.我们需要只取一条那么就是去重. 传统sql 是distinct 或者group by 两种方式,但是这种是不删除实体数据的, 我们此时所说的ABAP 去中是进行delete 的方式.我们会删了对应的内表数据 .
语法介绍
在去重之前,我们首先需要进行数据存放进内表,然后把内表数据进行排序, 注意排序内容,尽量与需要去重的数据一致.
代码语言:javascript复制SORT ITAB(内表名) BY 重复字段名.
DELETE ADJACENT DUPLICATES FROM itab(内表名) COMPARING针对的字段.
该语法用于删除对应的内容数据内容, 删除的条件是 comparing 针对的字段, 删除的结果是不论你有多少条数据,最终只是留下比较的数据唯一一条.
全部删除与针对删除
代码语言:javascript复制delete adjacent duplicates from 内表名 .
delete adjacent duplicates from 内表名 comparing 字段1 字段2 .
如果不写comparing 及后面的字段,则是所有字段均进行比较可以理解distinct .
增加了字段则是说只针对对应数据进行数据去重.
实际案例
数据准备
代码语言:javascript复制TABLES : ZWDEMOTABLE1 .
" 数据准备
TYPES:BEGIN OF ty_Data ,
uom TYPE char20 ,
doccode TYPE char20 ,
zrowid TYPE char20 ,
matcode TYPE char20 ,
matname TYPE char20 ,
memo TYPE char20 ,
light TYPE iconname, "指示灯
msg TYPE string,"消息
END OF ty_Data .
data :gs_DAta TYPE ty_Data .
data :gt_Data TYPE TABLE of ty_Data .
获取数据内容
代码语言:javascript复制select * from ZWDEMOTABLE1 into CORRESPONDING FIELDS OF TABLE gt_Data .
如图我们有一列是具有相同数据的列数据,其中双为多次内容.
使用语法
代码语言:javascript复制sort gt_Data by uom doccode zrowid matcode matname memo .
DELETE ADJACENT DUPLICATES FROM gt_Data COMPARING uom .
我们按照uom 数据进行排序以后,去重,我们只是参照uom进行去重,我们按照前面说的内容最终我们只会保留不重复对比的内容,即除了其中有3个双数据,我们只会保留一个双. 我们只会保留双的唯一一行数据.
新增一个对比字段
代码语言:javascript复制DELETE ADJACENT DUPLICATES FROM gt_Data COMPARING uom doccode.
此时我们比对的就是uom ,及doccode 对应的字段内容,很容易看出 有5条数据 .
技术总结
今天讲述的内容是又是一个工作中经常用到的知识点,内表去重,熟练使用内表去重可以增加alv查询的效率,等等环境都会使用到.
百里鸡汤
with great power comes great responsibility
这里是百里,一个努力的学习者. 努力学习好好记录,点滴进步,就是成功.