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