Filter 如何从表中筛选未配对的行?
我在SAP中创建了下表: 如果员工已登录(KOMMEN),但未注销(GEHEN),如何仅打印这些行Filter 如何从表中筛选未配对的行?,filter,abap,internal-tables,Filter,Abap,Internal Tables,我在SAP中创建了下表: 如果员工已登录(KOMMEN),但未注销(GEHEN),如何仅打印这些行 在本例中,我只想打印最后一行。您使用的输出方法称为ABAP list output。ABAP中有许多不同的输出方法。列表输出只有一个。在您的案例中,此列表输出的缺点是,添加过滤器取决于开发人员。也就是说,ABAP列表输出中没有用于过滤特定值的默认功能。这种输出方法非常简单 就像在评论中所说的,你应该更改你的ABAP代码,并在循环中“手动”进行过滤。举个例子: LOOP AT lt_employe
在本例中,我只想打印最后一行。您使用的输出方法称为ABAP list output。ABAP中有许多不同的输出方法。列表输出只有一个。在您的案例中,此列表输出的缺点是,添加过滤器取决于开发人员。也就是说,ABAP列表输出中没有用于过滤特定值的默认功能。这种输出方法非常简单 就像在评论中所说的,你应该更改你的ABAP代码,并在循环中“手动”进行过滤。举个例子:
LOOP AT lt_employees INTO ls_employee
WHERE komgeh = 'KOMMEN'.
WRITE: / ls_employee-mandt,
ls_employee-id,
ls_employee-pnr,
ls_employee-komgeh,
ls_employee-datum,
ls_employee-uhrzeit.
ENDLOOP.
请注意,还可以过滤内部表格中的“KOMMEN”值。您可以在循环中想到IF语句。无论如何,在LOOP语句中应用WHERE子句是筛选内部表最有效的方法之一
此外,由于您没有发布代码,您需要将我在代码段中使用的名称转移到您的代码中。您使用的输出方法称为ABAP list output。ABAP中有许多不同的输出方法。列表输出只有一个。在您的案例中,此列表输出的缺点是,添加过滤器取决于开发人员。也就是说,ABAP列表输出中没有用于过滤特定值的默认功能。这种输出方法非常简单 就像在评论中所说的,你应该更改你的ABAP代码,并在循环中“手动”进行过滤。举个例子:
LOOP AT lt_employees INTO ls_employee
WHERE komgeh = 'KOMMEN'.
WRITE: / ls_employee-mandt,
ls_employee-id,
ls_employee-pnr,
ls_employee-komgeh,
ls_employee-datum,
ls_employee-uhrzeit.
ENDLOOP.
请注意,还可以过滤内部表格中的“KOMMEN”值。您可以在循环中想到IF语句。无论如何,在LOOP语句中应用WHERE子句是筛选内部表最有效的方法之一
此外,由于您没有发布代码,您需要将我在代码片段中使用的名称转移到您的代码中。假设表的结构与您提供的屏幕一样简单,您可以使用simple
GROUP
子句计算未配对登录(KOMMEN
)事件:
此解决方案工作的先决条件是,如果用户结束了会话,则记录数为偶数,如果用户未结束会话,则记录数为奇数(仅登录)。假设表的结构与您提供的屏幕一样简单,您可以使用simple
GROUP
子句计算未配对登录(KOMMEN
)事件:
此解决方案工作的先决条件是,如果用户结束了会话,则记录数为偶数;如果用户未结束会话,则记录数为奇数(仅登录)。按数据升序对lt\u数据进行排序
PNR上升
库格下降。
在lt_数据赋值字段-SYMBOL()处循环,其中k_g='KOMMEN'。
lv_tabix=sy tabix+1。
读取表lt_数据分配字段-SYMBOL()索引lv_tabix。
如果sy subrc不是首字母
或-基准-基准
或-pnr-pnr。
附加到lt_输出。
恩迪夫。
结束循环。
然后您就有了在lt\u输出中需要的所有行。按数据升序对lt\u数据进行排序
PNR上升
库格下降。
在lt_数据赋值字段-SYMBOL()处循环,其中k_g='KOMMEN'。
lv_tabix=sy tabix+1。
读取表lt_数据分配字段-SYMBOL()索引lv_tabix。
如果sy subrc不是首字母
或-基准-基准
或-pnr-pnr。
附加到lt_输出。
恩迪夫。
结束循环。
然后,您就可以在lt_输出中获得您想要的所有行。如果开发处于早期阶段,或者没有太多东西基于此表,我认为您应该重新设计解决方案,并在“会话”中进行思考。我想你的生活会轻松得多。这是我大学的家庭作业。因此不可能更改结构。有一个命令用于表上的条件循环(
LOOP…WHERE
)。但是,如果这是一个DB选项卡,您也可以将WHERE
移动到您的SELECT
,如果这是一个家庭作业,您迄今为止尝试了什么?@vwegert i更改了表结构(增加了两列1.登录,2.登录时间,3.注销,4.注销时间),然后使用WHERE子句(WHERE signout='')现在我只有登录但未注销的条目)但我的教授不允许对表结构进行任何更改:/如果开发处于早期阶段,或者没有太多内容基于此表,我认为您应该重新设计解决方案,并在“会话”中进行思考。我想你的生活会轻松得多。这是我大学的家庭作业。因此不可能更改结构。有一个命令用于表上的条件循环(LOOP…WHERE
)。但是,如果这是一个DB选项卡,您也可以将WHERE
移动到您的SELECT
,如果这是一个家庭作业,您迄今为止尝试了什么?@vwegert i更改了表结构(增加了两列1.登录,2.登录时间,3.注销,4.注销时间),然后使用WHERE子句(WHERE signout='')现在我只有登录但未注销的条目)但我的教授不允许对表结构进行任何更改:/
SORT lt_data BY datum ASCENDING
PNR ASCENDING
K_G DESCENDING.
LOOP AT lt_data ASSIGNING FIELD-SYMBOL(<line>) WHERE k_g = 'KOMMEN'.
lv_tabix = sy-tabix + 1.
READ TABLE lt_data ASSIGNING FIELD-SYMBOL(<temp>) index lv_tabix.
IF sy-subrc IS NOT INITIAL
OR <line>-datum <> <temp>-datum
OR <line>-pnr <> <temp>-pnr.
APPEND <line> TO lt_output.
ENDIF.
ENDLOOP.