You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ABAP内表重复值标记问题:首条重复值未被标记求解决

解决ABAP内表重复值全标记问题

原代码仅通过与前一条记录的knumh对比标记后续重复条目,导致首次出现的重复值无法被标记。要实现所有重复值(包括首次出现的)都标记为X,可通过先统计每个knumh的出现次数,再根据次数判断标记的方式实现,具体修改如下:

修改后的代码

sort result_package stable by knumh zzklfn1.

* 定义统计内表,用于记录每个knumh的出现次数
data: gt_count type hashed table of i with unique key table_line,
      lv_count type i.

* 第一次循环:统计每个knumh的出现次数
loop at result_package assigning <result_fields>.
  read table gt_count with table line <result_fields>-knumh into lv_count.
  if sy-subrc = 0.
    lv_count = lv_count + 1.
    modify gt_count from lv_count index sy-tabix.
  else.
    insert 1 into gt_count.
    modify gt_count from <result_fields>-knumh index sy-tabix.
  endif.
endloop.

* 第二次循环:根据次数标记重复值
loop at result_package assigning <result_fields>.
  read table gt_count with table line <result_fields>-knumh into lv_count.
  <result_fields>-zzstafkz = cond #( when lv_count > 1 then 'X' else '' ).
endloop.

逻辑说明

  • 排序保证相同knumh的记录连续,提升统计效率;
  • 哈希表(HASHED TABLE)用于存储计数,确保查找和修改操作的高效性;
  • 第一次遍历完成对每个knumh出现次数的累加统计;
  • 第二次遍历根据统计的次数判断:只要该knumh出现次数大于1,所有对应记录的zzstafkz均设为X,否则为空。

简化方案(ABAP 7.40+版本适用)

利用GROUP BY语法可更简洁实现统计逻辑:

sort result_package stable by knumh zzklfn1.

* 分组统计每个knumh的出现次数
data(gt_knumh_count) = value #( for groups <group> of <result_fields> in result_package
                                group by <result_fields>-knumh
                                ( knumh = group-key count = lines( group ) ) ).

* 遍历标记重复值
loop at result_package assigning <result_fields>.
  read table gt_knumh_count with key knumh = <result_fields>-knumh into data(ls_count).
  <result_fields>-zzstafkz = cond #( when ls_count-count > 1 then 'X' else '' ).
endloop.

内容的提问来源于stack exchange,提问作者trapvader23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 19:52:55