首页 文章

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

提问于
浏览
4

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

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

获取有效条目的数量 .

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

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

3 回答

  • 5

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

    话虽这么说,你可以试试这个:

    LOOP AT lt_my_table TRANSPORTING NO FIELDS WHERE par1 = 'XYZ'.
      ADD 1 TO l_my_counter.
    ENDLOOP.
    
  • 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.
    
  • 4

    从740开始,您可以使用:

    DATA(lv_lines) = REDUCE i( INIT x = 0 FOR wa IN gt_itab
                        WHERE( F1 = 'XYZ' ) NEXT x = x + 1 ).
    

    用于计算gt_itab Session 密码f1 ='xyz'中的行数 .

相关问题