ABAP 之数据去重的详细用法

2022-12-07 14:18:20 浏览数 (1)


开启掘金成长之旅!这是我参与「掘金日新计划 · 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

这里是百里,一个努力的学习者. 努力学习好好记录,点滴进步,就是成功.

0 人点赞