abap - 如何在内部表中生成新的自己的列表?abap
问题描述
在开头的内部表中列出:
code | name | sum
22 | Jon | 234.3
22 | Jon | 34.2
22 | Jon | 0
22 | Jon | 0
12 | Bob | 999.4
12 | Bob | 0
45 | Anna | 0
45 | Anna | 0
11 | Mike | 0
11 | Mike | 234.3
要从内部表中获取此类列表的输出:
code | name | sum
22 | Jon | 234.3
22 | Jon | 34.2
12 | Bob | 999.4
45 | Anna | 0
11 | Mike | 234.3
形成新(出)名单的条件:
- 如果具有多个相同名称的列名(例如四个 - Jon)的值(列sum)为 34.5 ... 和 0,则丢弃所有 0 并仅打印非零值。
- 如果具有多个相同名称的列名(例如两个 - Anna)的值(列sum)为 0 - 则仅打印一个值为 0 的名称。
- 列表无法排序 - 输出必须有一个与输入顺序相同的列表。
解决方案
我正在考虑lt_grp1
将包含开始的内部表记录。我已经声明lt_grp2
了与lt_grp1
.
DATA: lv_index TYPE i VALUE 0.
APPEND LINES OF lt_grp1 TO lt_grp2.
DELETE ADJACENT DUPLICATES FROM lt_grp2 COMPARING code name.
LOOP AT lt_grp2 INTO ls_grp1.
LOOP AT lt_grp1 INTO ls_grp2
WHERE code = ls_grp1-code
AND name = ls_grp1-name.
lv_index = lv_index + 1.
IF ls_grp2-sum = 0.
IF lv_index > 1.
DELETE lt_grp1 INDEX sy-tabix.
ENDIF.
ELSE.
IF lv_index > 1.
DELETE lt_grp1 WHERE sum = 0
AND code = ls_grp1-code.
ENDIF.
ENDIF.
CLEAR: ls_grp2.
ENDLOOP.
CLEAR : lv_index.
ENDLOOP.
CLEAR :ls_grp1.
LOOP AT lt_grp1 INTO ls_grp1.
WRITE: / ls_grp1-code, ls_grp1-name, ls_grp1-sum.
ENDLOOP.
希望这可以帮助!
对于那些认为我没有测试过的人。
这是输入表-
输出 -
推荐阅读
- scala - 如何将 RDD 数组字符串转换为数据帧
- python - 找出我的网络服务器不可用的原因
- elasticsearch - Elasticsearch 关联精确匹配项
- powershell - ForEach-Object OutString,Powershell Awk 等价物
- asp.net-mvc - 在 ASP.NET Core Web API 中重用 ASP.NET MVC 5 会话 cookie
- python - 如何将 GMT 转换为 EDT(转换为秒格式)
- apache - 使用 mod_rewrite 进行内部重定向后提供不区分大小写的文件
- javascript - Javascript:使用键移动到 DIV 中的下一个元素
- android - 在 Windows 10 Home(无 Hyper-V)上安装时出现 Intel HAXM 错误
- rust - 在 nom 5.1.2 中使用位解析器时未能找到正确的类型参数