El recuento de entradas en abap tabla interna basada en la consulta

Puedo conseguir una tabla interna de una FUBA llamada que tiene ~ 100 filas. Aproximadamente el 40% de las filas no son relevantes para mí, ya que sólo se necesitan las entradas con PAR1 «XYZ».
En las tablas SQL (tablas transparentes), puedo usar un

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

para obtener el número de registros válidos.

A partir de la documentación, todas las que pude encontrar fue la LECTURA de la Tabla de sintaxis para iterar a través de la mesa. Mi enfoque actual es básicamente un bucle y aumentar si la fila que contiene el valor que desea. Pero esto parece muy ineficiente.

Hay un método mejor para mi requisito?

OriginalEl autor Jasper | 2013-08-05

3 Kommentare

  1. 5

    Hacer lo que se siente bien a usted. Con ~100 filas, prácticamente nada se va a hacer una gran diferencia en tiempo de ejecución. Para mí, la estabilidad sería más importante que la velocidad en este caso.

    Que se dice, usted podría intentar esto:

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

    OriginalEl autor vwegert

  2. 6

    Si las entradas de la tabla interna son irrelevantes usted podría hacer algo como esto.

    DELETE lt_table WHERE par1 <> 'XYZ'.
    

    Entonces usted puede contar el resto de los registros relevantes mediante el uso de lines( lt_table ) o DESCRIBE TABLE lt_table LINES l_number_of_lines.

    Aquí es un ejemplo.

    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.
    

    OriginalEl autor Jagger

  3. 5

    Como de 740 puede utilizar:

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

    para contar el número de líneas en gt_itab reunión codntion f1 = ‘xyz’.

    La única respuesta correcta para la programación moderna. Por supuesto, también puede ser utilizado en línea ( IF REDUCE... ), por lo que no es necesario declarar las variables. Aunque cuidado: técnicamente esto declara x y wa, aunque sólo sea una vez lo que significa que usted puede tener múltiples REDUCE de expresiones con el mismo resultado y el área de trabajo los nombres de las variables.

    OriginalEl autor Mehmet Metin

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea