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表所有数据
原文:像一棵海草海草海草