SAP ABAP开发技巧-使用INNER JOIN 内表解决聚合函数与FOR ALL ENTRIES IN 冲突

本文讲述了在ABAP编程中遇到的INNERJOIN与聚合函数如SUM()冲突的问题,介绍了错误尝试直接使用FORALLENTRIESIN和未预定义内表的情况,以及如何通过预定义内表并正确设置GROUPBY和INTOTABLE来避免错误。
摘要由CSDN通过智能技术生成

使用INNER JOIN 内表解决聚合函数与FOR ALL ENTRIES IN 冲突

1、业务场景:需要根据某个内表获取数据到新的内表时,因为需要使用到SUM()等聚合函数,FOR ALL ENTRIES IN 内表时会报错,如下图所示:在这里插入图片描述

在这里插入图片描述

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).
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

混沌破晓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值