二维码

把内表中多个字段作为主键排序,再取相同主键的多条记录中特定一条的方法

Twilight发表于 2014-07-08 17:50zhongguomao 最后回复于 2017-11-18 10:39 [复制链接] 3561 1

我们以内表中2个字段为主键举例,如: 同一个地点和商品下取到多条数据 然后根据条件记录号在KONP取KBETR最大的值
  1.   DATA:lv_nowstr TYPE string,
  2.        lv_laststr TYPE string,
  3.        lv_knumh TYPE konp-knumh.
  4.   SORT gt_a017_temp BY matnr werks.
  5.   SORT gt_konp_temp BY knumh.
  6.   LOOP AT gt_a017_temp."判断同一个地点和商品
  7.     CONCATENATE gt_a017_temp-matnr gt_a017_temp-werks INTO lv_nowstr.
  8.     IF sy-tabix = 1.
  9.       lv_laststr = lv_nowstr.
  10.     ENDIF.
  11.     IF lv_laststr = lv_nowstr.
  12.       READ TABLE gt_konp_temp WITH KEY knumh = gt_a017_temp-knumh BINARY SEARCH.
  13.       IF sy-subrc = 0.
  14.         MOVE-CORRESPONDING gt_konp_temp TO gt_konp_max.
  15.         gt_konp_max-matnr_flag = lv_laststr .
  16.         APPEND gt_konp_max.
  17.       ENDIF.
  18.     ELSE.
  19.       READ TABLE gt_konp_temp WITH KEY knumh = gt_a017_temp-knumh BINARY SEARCH.
  20.       IF sy-subrc = 0.
  21.         MOVE-CORRESPONDING gt_konp_temp TO gt_konp_max.
  22.         gt_konp_max-matnr_flag = lv_nowstr .
  23.         APPEND gt_konp_max.
  24.       ENDIF.
  25.       lv_laststr = lv_nowstr.
  26.     ENDIF.
  27.   ENDLOOP.

  28.   SORT gt_konp_max BY matnr_flag kbetr.
  29.   SORT gt_a017_temp BY knumh.
  30.   LOOP AT gt_konp_max.
  31.     lv_knumh = gt_konp_max-knumh.
  32.     AT END OF matnr_flag."最后一条为最大值
  33.       READ TABLE gt_a017_temp WITH KEY knumh = lv_knumh BINARY SEARCH.
  34.       IF sy-subrc = 0.
  35.         APPEND gt_a017_temp TO gt_a017.
  36.       ENDIF.
  37.     ENDAT.
  38.   ENDLOOP.
复制代码
回复

使用道具 举报

zhongguomao
算法过于混乱啊。
回复 支持 反对

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表