首页 > 解决方案 > 将两个内部表连接并聚合为一张

问题描述

我需要按照 True_Origin 和 True_Destination 级别将以下两个表聚合为一个。

表 2 ( IT_DATES_OD):

FDate2    Flight_Number2  Origin2  Destination2  Amount3  Amount4
20190501  123             DXB      LOS           5        12
20190501  123             DXB      LOS           22       558
20190501  123             DXB      LOS           2556     4585

表一(IT_TOD_OD):

Flight_Date_OD  Flight_Number_OD  Origin  Destination  True_origin  True_destination  Net_Net_Net  Amount2
20190501        123               DXB     LOS          DXB          NBO               5            12
20190501        123               DXB     LOS          DXB          ADD               22           558
20190501        123               DXB     LOS          DXB          LOL               2556         4585

我可以使用常用字段(日期、航班号、出发地、目的地)进行聚合,但无法在 True_origin 和 True_destination 的详细级别上进行聚合。

SORT IT_DATES_TOD BY FDATE2 FLIGHT_NUMBER2 ORIGIN2 DESTINATION2 ASCENDING.

CLEAR WA_OUTPUT.

LOOP AT IT_DATES_TOD INTO WA_DATES_TOD WHERE FDATE2 <> ''.
      WA_OUTPUT-FDATE         = WA_DATES_TOD-FDATE2.
      WA_OUTPUT-FLIGHT_NUMBER = WA_DATES_TOD-FLIGHT_NUMBER2.
      WA_OUTPUT-ORIGIN        = WA_DATES_TOD-ORIGIN2.
      WA_OUTPUT-DESTINATION   = WA_DATES_TOD-DESTINATION2.

   LOOP AT IT_TOD_OD INTO WA_TOD_OD 
       WHERE FLIGHT_DATE_OD   = WA_DATES_TOD-FDATE2
         AND FLIGHT_NUMBER_OD = WA_DATES_TOD-FLIGHT_NUMBER2
         AND ORIGIN           = WA_DATES_TOD-ORIGIN2
         AND DESTINATION      = WA_DATES_TOD-DESTINATION2.

      WA_OUTPUT-TRUE_ORIGIN      = WA_TOD_OD-TRUE_ORIGIN.
      WA_OUTPUT-TRUE_DESTINATION = WA_TOD_OD-TRUE_DESTINATION.
      WA_OUTPUT-NET_NET_NET      = WA_TOD_OD-NET_NET_NET.
      WA_OUTPUT-RE_PRO_REVFUEL   = 0.
      WA_OUTPUT-BLOCK_HOUR       = 0.

      APPEND WA_OUTPUT TO IT_OUTPUT.
   ENDLOOP.
ENDLOOP.

标签: abap

解决方案


请查看 ABAP 中的 collect 语法:ABAP 中的 COLLECT 语句用于通过避免重复条目以及以汇总方式将工作区的组件插入内部表中。句法

COLLECT <line> INTO <itab>

当您使用 collect 语句时,会发生以下步骤。

首先,它将检查内部表中与工作区数据中的键匹配的任何记录。

  • 如果找不到任何匹配的记录,则将工作区中的新数据插入到内部表中
  • 如果找到任何具有相同键的记录,则不插入新记录,而是将工作区组件的数值字段值与匹配记录中的相应字段组件相加,并更新内部表记录。

你的两个 itabs 都应该使用 Destination 结构:

Date      F_Number Orign  Destin T_origin T_destin Amount Amount2

因此 collect 命令可以使用数字字段的添加功能。


推荐阅读