我只想询问如何计算内部表中的重复项。我想这样做是为了让我按客户计算并将其放入客户计数栏。
Sales Employee Customer Customer Count
a 1 2
a 2 2
b 3 3
b 2 3
b 4 3
c 1 1
答案 0 :(得分:3)
collect
语句。 collect
将条目添加到内部表,并在具有相同键字段的行已存在时添加数字字段。创建一个内部表,其中包含销售员工的字段,另一个计数字段和循环销售表,使用collect更新每个销售的计数表。
types: begin of t_count,
employee type text10,
count type i,
end of t_count.
data: it_count type standard table of t_count,
wa_count type t_count.
loop at it_sales into wa_sales.
move: wa_sales-employee to wa_count-employee,
1 to wa_count-count.
collect wa_count into it_count.
endloop.
该示例假设您有一个表it_sales
,一个工作区wa_sales
,两者都有一个字段employee
。然后,表it_count
包含您的员工列表(按照它们在销售表中的显示顺序)以及它们在销售表中出现的次数。
答案 1 :(得分:1)
FIELD-SYMBOLS : <lfs_sales> TYPE ty_sales.
假设li_sales是一个包含Sales_employee,Customer和customer_count列的内部表。最初表条目如下所示。
Sales_employee Customer customer_count
a 1 0
a 2 0
b 3 0
b 2 0
b 4 0
c 1 0
我们需要计算重复的sales_employee计数并更新customer_count字段。我们可以使用Dirik建议的收集声明或使用控制中断语句,如下所示。
使用SUM关键字的先决条件是将customer_count初始化为每行1,以便它可以根据类似的sales_employee总结客户数。
LOOP AT li_sales ASSIGNING <lfs_sales>.
<lfs_sales>-customer_count = 1.
ENDLOOP.
现在条目如下所示。
Sales_employee Customer customer_count
a 1 1
a 2 1
b 3 1
b 2 1
b 4 1
c 1 1
以下代码确实更新了customer_count字段值。
LOOP AT li_sales INTO rec_sales.
AT END OF employee.
SUM.
MOVE-CORRESPONDING rec_sales TO rec_count.
APPEND rec_count TO li_count.
CLEAR rec_count.
ENDAT.
ENDLOOP.
SORT li_count BY employee.
LOOP AT li_sales ASSIGNING <lfs_sales>.
CLEAR rec_count.
READ TABLE li_count INTO rec_count
WITH KEY employee = <lfs_sales>-employee
BINARY SEARCH.
IF sy-subrc IS INITIAL.
<lfs_sales>-count = rec_count-count.
ENDIF.
ENDLOOP.
现在内部表被分配了customer_count,如下所示。
Sales_employee Customer customer_count
a 1 2
a 2 2
b 3 3
b 2 3
b 4 3
c 1 1