SAP DELETE ADJACENT DUPLICATES FROM语句的深入研究及应用
使用DELETE ADJACENT DUPLICATE FORM特别注意以下事項
前一段时间调试一个程序的,半天没发现问题在哪里,经过测试才发现
delete adjacent duplicates from itab 和 delete adjacent duplicates from itab comparing all fields还是有区别的:
前者相邻两行数据,如果除金额字段以外的其他字段都相同,则去重复删除其中一行;
后者相邻两行数据,如果所有对应的字段都相同(包含金额字段),则去重复删除其中一行。
DELETE ADJACENT DUPLICATES FROM <table>的功能是删除邻近、相同的行,如果是为了把内表itab里部相同的行去掉,则应该对内表先按某个字段排序。但是有时候对某一个字段排序并不能把相同的两行排序到一起。
SORT itab BY comp1, comp2,..., compi [ASCENDING|DESCENDING]
通常我们会按一个字段进行排序,但是这有有可能相同的行排序不到一块去,比如今天我下行对itab_sf01表按BUKRS进行排序,结果如图
图1 排序及删除语句
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
图2 itab_sf01表内容
由图2可以发现,由于排序时只按BUKRS字段,所以第1行和第3行、第2行和第4行内容相同,但没有相邻,所以执行DLETE ADJACENT DUPLICATES FROM itab_sf01 也没有达到预期目的。
解决方案:把SORT语句改成 SORT itab_sf01 BY bukrs belnr gjahr augdt.即可。
DELETE ADJACENT DUPLICATES FROM 语句,我们知道他的基本功能是:删除相邻行的重复数据。
但是他最终保留哪一行数据呢?
下面看看一个Demo:
DATA : BEGIN OF itab OCCURS 0,vbeln TYPE lips-vbeln,version TYPE c LENGTH 2,END OF itab.itab-vbeln = '0084000010'.
itab-version = '1'.
APPEND itab.
itab-vbeln = '0084000010'.
itab-version = '2'.
APPEND itab.
itab-vbeln = '0084000010'.
itab-version = '3'.
APPEND itab.itab-vbeln = '0084000011'.
itab-version = '2'.
APPEND itab.
itab-vbeln = '0084000011'.
itab-version = '3'.
APPEND itab.
itab-vbeln = '0084000009'.
itab-version = '2'.
APPEND itab.
itab-vbeln = '0084000009'.
itab-version = '1'.
APPEND itab.WRITE:/ '原始数据:'.
LOOP AT itab.WRITE: / itab-vbeln,itab-version.
ENDLOOP.SORT itab BY vbeln ASCENDING version DESCENDING.
WRITE:/ '排序数据:'.
LOOP AT itab.WRITE: / itab-vbeln,itab-version.
ENDLOOP.DELETE ADJACENT DUPLICATES FROM itab COMPARING vbeln.
WRITE:/ '排序数据:'.
LOOP AT itab.WRITE: / itab-vbeln,itab-version.
ENDLOOP.
可见DELETE ADJACENT DUPLICATES FROM只保留相邻重复行的第一行数据,大家也可以测试测试其他场景验证。
实战中用法举例:
主数据下发:一种主数据下发,可能有多个版本号,我们只保留版本号最大的一条数据,作为最新数据。用这种方法最简单啦
SAP DELETE ADJACENT DUPLICATES FROM语句的深入研究及应用相关推荐
- DELETE ADJACENT DUPLICATES FROM语句的深入研究及应用
DELETE ADJACENT DUPLICATES FROM 语句,我们知道他的基本功能是:删除相邻行的重复数据. 但是他最终保留哪一行数据呢? 下面看看一个Demo: DATA : BEGIN O ...
- delete adjacent duplicates from用法(以某个关键字删除相邻重复行的数据)
文章目录 一.知识点; 二.例子; 三. 总结; 一.知识点; DELETE ADJACENT DUPLICATES FROM. 二.例子; SORT gt_resb BY matnr. DELETE ...
- SORT,DELETE ADJACEN DUPLICATES FROM保留有效数据
SORT,DELETE ADJACEN DUPLICATES FROM保留有效数据 要求:结构zstructure还有两个字段,分别为结构名称NAME.是否处理字段FLAG(0,代表处理:1,代表没有 ...
- sql truncate_如何在SQL Delete和SQL Truncate语句后使用数据库备份恢复数据
sql truncate This article explores the recovery of data removed by SQL Delete and SQL Truncate state ...
- LeetCode 1047. Remove All Adjacent Duplicates In String
1047. Remove All Adjacent Duplicates In String(删除字符串中的所有相邻重复项) 链接:https://leetcode-cn.com/problems/r ...
- leetcode 1047. Remove All Adjacent Duplicates In String | 1047. 删除字符串中的所有相邻重复项(Java)
题目 https://leetcode.com/problems/remove-all-adjacent-duplicates-in-string/ 题解 简单题,不写思路了,一看就明白. class ...
- SAP HANA里执行SQL语句的两种方式
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
- [SAP ABAP开发技术总结]动态语句、动态程序
在ABAP中写动态的程序,灵活的程序,一定要知道的 1.13. 动态语句 1.13.1. 内表动态访问 1.13.2. 动态类型 1.13.3. 动态SQL 1 ...
- ABAP中 delete 语句的使用
内容来自: https://blog.csdn.net/Qunending/article/details/106779981 DELETE itab[] 用于 loop 当中,删除当前loop行, ...
- [SAP ABAP开发技术总结]ABAP调优——Open SQL优化
11.1. 数据库编程方面优化 1. 不要使用 SELECT * ...,选择需要的字段, SELECT * 既浪费CPU,又浪费网络带宽资源,还需占用大量的ABAP内存 2. 不要使 ...
最新文章
- 【网络编程】非阻塞connect详解
- 2019~2020年终总结
- hdu1.3.4 排序
- Java内存分析1 - 从两个程序说起
- jmr连接mysql_MYSQL 优化之延迟关联
- C#调用百度地图API入门解决BMap未定义问题
- 【转载】现代浏览器的工作原理
- 【Pyhton】随机漫步散点图
- automake生成静态库文件_基于CocoaPods的组件化原理及私有库实践
- 获取Resources文件下图片的精灵格式
- 【原创】中文分词系统 ICTCLAS2015 的JAVA封装和多线程执行(附代码)
- Atitit。sql2016标准化的规划方案 v3 q2a
- 10HTML5期末大作业:影视在线网站设计——电影网H5(9页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码
- 原码一位乘的数值运算
- SQLMap常用命令介绍
- Tomcat中使用cookie
- 正确编译差分包签名(MTK系统)
- 火车票能不能选座_电话订火车票可以自己选座位吗
- 一道关于SVM的机器学习作业题
- FuJacKing-我的豆瓣解封了