ABAP新手基础入门知识(二)

本文介绍ABAP中去重复数据的两种方法:使用DELETE语法去除相邻重复记录及利用SELECT语句进行数据汇总。同时,展示了如何通过AS别名在多表连接时统一字段名称,便于数据处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这次整理下最近学的一些语法,可能对大家来说会比较零散,以后我会尽量整理好。
去重复数据语法,一般用于多表连接放到一个内表中的时候用到,去重可以提高搜索的性能。
一、delete语法去重复

 TYPES:BEGIN OF ty_test,
          field  TYPE char10,
          field1 TYPE i,
        END OF ty_test.
  TYPES: lt_test1 TYPE ty_test OCCURS 0."表类型
  DATA: lt_test2 TYPE lt_test1, "内表
        lt_test3 LIKE lt_test2,
        lt_test4 LIKE lt_test3.
  DATA: lt_test1 TYPE STANDARD TABLE OF ty_test,
        ls_test1 TYPE ty_test.

  CLEAR ls_test1.
  ls_test1-field = 'mm'.
  ls_test1-field1 = '5'.
  APPEND ls_test1 TO lt_test1.

  CLEAR ls_test1.
  ls_test1-field = 'gg'.
  ls_test1-field1 = '6'.
  APPEND ls_test1 TO lt_test1.

  CLEAR ls_test1.
  ls_test1-field = 'dd'.
  ls_test1-field1 = '7'.
  APPEND ls_test1 TO lt_test1.

  CLEAR ls_test1.
  ls_test1-field = 'cc'.
  ls_test1-field1 = '7'.
  APPEND ls_test1 TO lt_test1.

  CLEAR ls_test1.
  ls_test1-field = 'cc'.
  ls_test1-field1 = '7'.
  APPEND ls_test1 TO lt_test1.

  CLEAR ls_test1.
  ls_test1-field = 'aa'.
  ls_test1-field1 = '7'.
  APPEND ls_test1 TO lt_test1.

  CLEAR ls_test1.
  ls_test1-field = 'test'.
  ls_test1-field1 = '666'.
  APPEND ls_test1 TO lt_test1.
  MODIFY lt_test1 FROM ls_test1 INDEX 2.


  CLEAR ls_test1.
  ls_test1-field = 'gg'.
  APPEND ls_test1 TO lt_test1.
  MODIFY lt_test1 FROM ls_test1 INDEX 2 TRANSPORTING field.
  DELETE lt_test1 INDEX 2.

  SORT lt_test1 BY  field1.
  BREAK-POINT.
  DELETE  ADJACENT DUPLICATES FROM lt_test1."去重复
  BREAK-POINT.
  DELETE  ADJACENT DUPLICATES FROM lt_test1 COMPARING field1.
  BREAK-POINT.

在第一个断点的时候我们开看下按照字段fiedld1进行排序后的结果。
在这里插入图片描述
我们可以看到lt_test1这个内表第四第五行记录是一样的,我们先用第一种去重,看看效果。
在这里插入图片描述
我们可以看到完全相同的数据去掉了,我们接着用第二种按照字段的方法进行去重,看看效果。
在这里插入图片描述
我们可以看到凡是字段field1相同的值都去掉了。

二、select语法

*不需要定义内表直接进行取数
DATA: count TYPE i,
      sum TYPE i,
      avgerage TYPE p DECIMALS 2,
      total TYPE p DECIMALS 2,
      connid TYPE sbook-connid.


SELECT connid COUNT( * ) sum( luggweight ) avg( luggweight )
  FROM sbook
  INTO (connid,count,sum,avgerage)
  GROUP BY connid.
  CHECK sy-subrc = 0.
  WRITE: / sy-dbcnt,
         / connid,
         / count,
         / sum,
         / avgerage.
  ENDSELECT.

这是用到系统计算记录、字段数值的合计和平均值。我们断点调试看看数值。
在这里插入图片描述
这里没有用到total所以阿德值是初始值00。大家可以试下,这个是用于实战项目中alv的某字段进行合计用法,后续我会放一个比较实用的合计例子用at end of,这两种方法都比较实用。

三、AS别名用法

*两表连接 字段别名 as 可以把两张表不同字段 别名放到同一张内表同一字段下
  TYPES:BEGIN OF ty_flight,
          airpfrom2 TYPE spfli-airpfrom,
          airpto   TYPE spfli-airpto,
          fldate   TYPE sflight-fldate,
          deptime  TYPE spfli-deptime,
        END OF ty_flight.
  DATA:lt_flight TYPE STANDARD TABLE OF ty_flight,
       ls_flight TYPE ty_flight.
  SELECT spfli~airpfrom as airpfrom2
         spfli~airpto
         sflight~fldate
         spfli~deptime
    into CORRESPONDING FIELDS OF TABLE lt_flight
    FROM spfli
    INNER JOIN sflight
    on spfli~carrid = sflight~carrid
    and spfli~connid = sflight~connid
    UP TO 5 ROWS.
    BREAK-POINT .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值