根据查询计算abap内部表中的条目

时间:2013-08-05 14:54:01

标签: sap abap

我从一个有100行的FUBA调用中得到一个内部表。大约40%的行与我无关,因为我只需要PAR1“XYZ”的条目。 在SQL表(透明表)上,我可以使用

select count(*) from tab where PAR1 = "XYZ" 

获取有效条目的数量。

查看文档,我所能找到的只是READ Table语法来遍历表。我当前的方法是基本上有一个循环,如果行包含我想要的值,则增加。但这似乎效率很低。

对我的要求有更好的方法吗?

4 个答案:

答案 0 :(得分:6)

如果内部表中的条目无关紧要,您可以执行以下操作。

DELETE lt_table WHERE par1 <> 'XYZ'.

然后,您可以使用lines( lt_table )DESCRIBE TABLE lt_table LINES l_number_of_lines.

计算剩余的相关记录

这是一个例子。

TYPES: BEGIN OF tt_test,
  par1 TYPE c LENGTH 3,
  END OF tt_test.

DATA: lt_table TYPE TABLE OF tt_test.
DATA: l_number_of_lines TYPE i.
FIELD-SYMBOLS: <fs_par1> LIKE LINE OF lt_table.

APPEND INITIAL LINE TO lt_table ASSIGNING <fs_par1>.
<fs_par1>-par1 = 'XYZ'.
APPEND INITIAL LINE TO lt_table ASSIGNING <fs_par1>.
<fs_par1>-par1 = 'ABC'.
APPEND INITIAL LINE TO lt_table ASSIGNING <fs_par1>.
<fs_par1>-par1 = 'XYY'.
APPEND INITIAL LINE TO lt_table ASSIGNING <fs_par1>.
<fs_par1>-par1 = 'XYZ'.
APPEND INITIAL LINE TO lt_table ASSIGNING <fs_par1>.
<fs_par1>-par1 = 'XYZ'.

l_number_of_lines = LINES( lt_table ).
WRITE / l_number_of_lines.
DESCRIBE TABLE lt_table LINES l_number_of_lines.
WRITE / l_number_of_lines.
DELETE lt_table WHERE par1 <> 'XYZ'.
l_number_of_lines = LINES( lt_table ).
WRITE / l_number_of_lines.

答案 1 :(得分:5)

做任何对你感觉合适的事。大约100行,几乎没有什么能在运行时产生巨大的差异。对我来说,在这种情况下,稳定性比速度更重要。

话虽如此,你可以试试这个:

LOOP AT lt_my_table TRANSPORTING NO FIELDS WHERE par1 = 'XYZ'.
  ADD 1 TO l_my_counter.
ENDLOOP.

答案 2 :(得分:5)

从740开始,您可以使用:

[byte.strings]

用于计算gt_itab会议密码中的行数f1 =&#39; xyz&#39;。

答案 3 :(得分:0)

带有FOR的变量也应该起作用,但是它需要该表的声明表类型:

TYPES: tt_mara TYPE TABLE OF mara WITH EMPTY KEY.
DATA(count) = lines( VALUE tt_mara( FOR line IN lt_mara WHERE ( matnr = 'XXX' ) ( line ) ) ).