[英]How to assign internal table into a structure and then to a field in ABAP
[英]How to generate new own list in an internal table? 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
形成新(傳出)清單的條件:
我正在考慮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.
希望這可以幫助!
對於那些認為我沒有測試過的人。
這是輸入表-
輸出 -
這有 O(n log(n)) 運行時。
lt_copy = lt_original.
SORT lt_copy BY code name ASCENDING sum DESCENDING. "if there is a non-zero line, it is at the top "
DELETE ADJACENT DUPLICATES FROM lt_copy.
LOOP AT lt_original INTO DATA(ls_original).
IF ls_original-sum = 0. "only 0 lines need to be checked"
READ TABLE lt_copy ASSIGNING <fs_max_sum> BINARY SEARCH
WITH KEY code = <fs_original>-code
name = <fs_original>-name.
IF <fs_max_sum>-sum = 0.
"there are only zeros for this code and name, we need it"
ELSE.
DELETE lt_original.
ENDIF.
ENDIF.
ENDLOOP.
我沒有足夠的要點來評論其他人的帖子,但是我看到當規范說它不能排序時,他們正在對表格進行排序。 不幸的是,您將不得不對該表進行排序(這實際上是幸運的事情)。 您需要問為什么它必須以這種特定方式保留。
我嘗試了一種不進行排序的方法,但是在提取數據時丟失了Anna。
LOOP At itab.
READ TABLE itab WITH KEY code = itab-code TRANSPORTING NO FIELDS.
IF SY-SUBRC EQ 0.
IF itab-sum NE 0.
wa-code = itab-code.
wa-name = itab-name.
wa-sum = itab-sum.
APPEND wa.
ENDIF.
ENDIF
ENDLOOP.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.