ABAP FOR ALL ENTRIES IN

*&---------------------------------------------------------------------*
*& Report ZWH_FOR ALL ENTRIES IN
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*

*如果FOR ALL ENTRIES IN的是空内表,则查询from 表的所有数据放入内表;如果FOR ALL ENTRIES IN的不是空内表,则从from 表查询出与内表内相关的数据放入

*语法:

*在内表不为空的情况下
*FROM 表 into table 内表 FOR ALL ENTRIES IN 内表 where 表字段 = 内表字段
*在内表为空的情况下不建议使用 FOR ALL ENTRIES IN,因为无意义

 

REPORT Report ZWH_FOR ALL ENTRIES IN.

 

* 定义ty_spfli的内表
DATA: BEGIN OF ty_spfli,
airpfrom LIKE spfli-airpfrom,
airpto LIKE spfli-airpto,
fldate LIKE sflight-fldate,
deptime LIKE spfli-deptime,
END OF ty_spfli.


* 定义内表和工作区都为it_spfli的内表
DATA: it_spfli LIKE ty_spfli OCCURS 0 WITH HEADER LINE .

*内表放入数据

it_spfli-airpto = 'JFK'.
APPEND it_spfli .
it_spfli-airpto = 'SFO'.
APPEND it_spfli .

 

*为了提高效率,在使用sql语句在FOR ALL ENTRIES IN内表前,需要先将FOR ALL ENTRIES IN的内表数据去重复,具体语法如下(先排序在删除相邻行重复数据):

SORT it_spfli BY 字段.                                                                                         "根据可以排序的字段排序
DELETE ADJACENT DUPLICATES FROM  it_spfli COMPARING  airpto.         ”根据FOR ALL ENTRIES IN内表和表的关联字段去重,提高下边sql效率

*备注:如果  it_spfli内表其他逻辑会用,则这里可以重新定义一个新内表,将it_spfli直等新内表,排序去重对这个新内表操作即可

 

 

* 查询语句,
SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE it_spfli
FOR ALL ENTRIES IN it_spfli
WHERE spfli~airpto = it_spfli-airpto .

* 输出
LOOP AT it_spfli.
WRITE: / '【from ', it_spfli-airpfrom, 'to = ',it_spfli-airpto, '】 航班日期:'
, it_spfli-fldate, ' 出发时间: ', it_spfli-deptime .
ENDLOOP.

* 字符串拼接
WRITE: / '青青子衿' & '悠悠我心'.

输出结果:查询的是所有的JFK和SFO机场。

 

 

如果没有下边四行代码,内表为空。则输出from表所有数据

 it_spfli-airpto = 'JFK'.
APPEND it_spfli .
it_spfli-airpto = 'SFO'.
APPEND it_spfli .

则输出:输出from表所有数据

 

 

原文:像一棵海草海草海草 

posted @ 2022-03-07 10:30  狂奔的蜗牛君丶  阅读(414)  评论(0)    收藏  举报