ABAP 多个内表连接

一、业务情况

先分别进行两次取数,当gty_output-meins的值与lt_meins中的msehi的值相等时,取出msehl的值

二、定义

TYPES: BEGIN OF ty_output,
         werks      TYPE marc-werks,     "工厂
         matnr      TYPE marc-matnr,     "任务号
         maktx      TYPE makt-maktx,     "物料描述
         zpm        TYPE mara-zpm,       "品名
         zggxh      TYPE mara-zggxh,     "规格
         meins      TYPE mara-meins,     "基本计量单位
         matkl      TYPE mara-matkl,     "物料组
         mtpos_mara TYPE mara-mtpos_mara, "普通项目类别
         disgr      TYPE marc-disgr,      "MRP组
         mtvfp      TYPE marc-mtvfp,     "可用性检查
         vkorg_ana  TYPE vbap-vkorg_ana, "销售组织
         vtweg_ana  TYPE vbap-vtweg_ana, "分销渠道
         spart      TYPE mara-spart,     "产品组
         vbeln      TYPE vbap-vbeln,     "销售订单
         bstkd_ana  TYPE vbap-bstkd_ana,  "合同号
         vstel      TYPE vbap-vstel,     "发货工厂
         tragr      TYPE mara-tragr,      "运输组
         ersda      TYPE mara-ersda,   "创建日期
*         msehi      TYPE t006a-msehi,   "单位
*         msehl      TYPE t006a-msehl,   "单位文本
         box        TYPE c LENGTH 1,
       END OF ty_output.

TYPES: BEGIN OF ly_output,
         werks      TYPE marc-werks,     "工厂
         matnr      TYPE marc-matnr,     "任务号
         maktx      TYPE makt-maktx,     "物料描述
         zpm        TYPE mara-zpm,       "品名
         zggxh      TYPE mara-zggxh,     "规格
         meins      TYPE mara-meins,     "基本计量单位
         matkl      TYPE mara-matkl,     "物料组
         mtpos_mara TYPE mara-mtpos_mara, "普通项目类别
         disgr      TYPE marc-disgr,      "MRP组
         mtvfp      TYPE marc-mtvfp,     "可用性检查
         vkorg_ana  TYPE vbap-vkorg_ana, "销售组织
         vtweg_ana  TYPE vbap-vtweg_ana, "分销渠道
         spart      TYPE mara-spart,     "产品组
         vbeln      TYPE vbap-vbeln,     "销售订单
         bstkd_ana  TYPE vbap-bstkd_ana,  "合同号
         vstel      TYPE vbap-vstel,     "发货工厂
         tragr      TYPE mara-tragr,      "运输组
         ersda      TYPE mara-ersda,   "创建日期
         msehi      TYPE t006a-msehi,   "单位
         msehl      TYPE t006a-msehl,   "单位文本
         box        TYPE c LENGTH 1,
       END OF ly_output.

TYPES: BEGIN OF lty_meins,
         msehi TYPE t006a-msehi,
         msehl TYPE t006a-msehl,
       END OF lty_meins.

DATA lt_meins TYPE TABLE OF lty_meins.
DATA ls_meins TYPE lty_meins.

DATA gty_output TYPE TABLE OF ty_output.
DATA gsy_output TYPE ty_output.

DATA gt_output TYPE TABLE OF ly_output.
DATA gs_output TYPE ly_output.

三、取数

  SELECT
    marc~werks,
    marc~matnr,
    makt~maktx,
    mara~zpm,
    mara~zggxh,
    mara~meins,
    mara~matkl,
    mara~mtpos_mara,
    marc~disgr,
    marc~mtvfp,
    vbap~vkorg_ana,
    vbap~vtweg_ana,
    mara~spart,
    vbap~vbeln,
    vbap~bstkd_ana,
    vbap~vstel,
    mara~tragr,
    mara~ersda
    FROM marc
    LEFT  JOIN makt ON marc~matnr = makt~matnr
    LEFT  JOIN mara ON marc~matnr = mara~matnr
    LEFT  JOIN vbap ON marc~matnr = vbap~matnr
    WHERE marc~pstat NOT LIKE '%V%'
    AND  marc~lvorm <> 'X' "工厂级已删除物料标识
    AND mara~spart IN (10,30)
    AND vbap~vbeln IS NOT INITIAL
    AND marc~werks = @p_werks
    AND marc~matnr IN @s_matnr
    AND vbap~vbeln IN @s_vbeln
    AND mara~ersda IN @s_ersda
    INTO CORRESPONDING FIELDS OF TABLE @gty_output.


  IF gty_output IS NOT INITIAL.
    SELECT
        t006a~msehi,
        t006a~msehl
        FROM t006a
        INTO CORRESPONDING FIELDS OF TABLE @lt_meins
      FOR ALL ENTRIES IN @gty_output
        WHERE t006a~spras = 1
        AND  t006a~msehi = @gty_output-meins.
    SORT lt_meins BY msehi.
  ENDIF.


  LOOP AT gty_output INTO gsy_output.
    CLEAR gs_output.
    MOVE-CORRESPONDING gsy_output TO gs_output.
    READ TABLE lt_meins INTO ls_meins
                    WITH KEY msehi = gsy_output-meins
                    BINARY SEARCH
                    .
    IF sy-subrc = 0."读取到
      gs_output-msehl = ls_meins-msehl.
    ELSE.
      CONTINUE."终止当前循环 并执行下一次循环
    ENDIF.
    APPEND gs_output TO gt_output.
  ENDLOOP.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值