使用INNER JOIN 内表解决聚合函数与FOR ALL ENTRIES IN 冲突
1、业务场景:需要根据某个内表获取数据到新的内表时,因为需要使用到SUM()等聚合函数,FOR ALL ENTRIES IN 内表时会报错,如下图所示:![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/caaeb05cc25b407d8481d2692c93a100.png)
2、错误案例:通过INNER JOIN内表的形式,前提是inner join的内表需要进行预定义,不允许使用@data的形式定义。
报错文本如下:“GT_XMTT” 没有在 ABAP 字典中定义为表、映射视图或数据库视图。projection view, or database view in ABAP Dictionary or does not exist in an active version.
3、正确案例: inner join的内表预定义,GROUP BY 非聚合字段并且 INTO TABLE/INTO CORRESPONDING FIELDS OF TABLE 需要放到select 语句最后
TYPES:BEGIN OF ty_xmtt,
xmbm TYPE zrre_d_xmtt-xmbm,
END OF ty_xmtt.
DATA:lt_xmtt TYPE TABLE OF ty_xmtt.
SELECT * FROM zrre_d_xmtt INTO TABLE @DATA(gt_xmtt)
UP TO 100 ROWS WHERE xmjd = '04' AND xmzt = '03'.
lt_xmtt = CORRESPONDING #( gt_xmtt MAPPING xmbm = xmbm ).
SELECT a~conno,
SUM( conamt ) AS conamt,
SUM( conamt_intax ) AS conamt_intax
FROM /rer/d_bo_conth AS a
INNER JOIN @lt_xmtt AS b
ON a~prjid = b~xmbm
WHERE delflag = @space AND appstatus = '40'
GROUP BY conno
INTO TABLE @DATA(gt_conth).