Anzahl Datensätze in internen Tabellen Thema ist als GELÖST markiert

Getting started ... Alles für einen gelungenen Start.
29 Beiträge • Seite 1 von 2 (current) Nächste
29 Beiträge Seite 1 von 2 (current) Nächste

Anzahl Datensätze in internen Tabellen

Beitrag von debianfan (ForumUser / 78 / 59 / 0 ) » 25.04.2017 13:44
Hallo,

ich habe folgendes Problem:

Ich habe eine interne Tabelle:

Müller Michael abap_true
Meier Sepp abap_false
Schmidt Rita abap_true
Schulze Johann abap_false


Ich muss nun wissen:

1. wieviele Einträge gibt es
describe table wäre hier die Lösung

2. wieviele Einträge gibt es mit abap_true
3. wieviele Einträge gibt es mit abap_false

describe table mit einer "Zähloption" gibts ja nicht - oder ?

gruß & danke für hilfreiche Ideen ;-)
Zuletzt geändert von debianfan am 27.04.2017 16:04, insgesamt 1-mal geändert.
Ich weiß viel - aber nicht alles - deswegen lerne ich gern dazu & bin für Hinweise von erfahrenen ITlern immer dankbar.


Re: Anzahl Datensätze in internen Tabellen

Beitrag von wreichelt (Expert / 810 / 19 / 137 ) » 25.04.2017 14:21
Hallo,

prüfe mal



SELECT COUNT( * ) INTO COUNT FROM TAB WHERE spaltenname X = 'abap_true'.

Gruß

Re: Anzahl Datensätze in internen Tabellen

Beitrag von Tron (Top Expert / 1187 / 22 / 274 ) » 25.04.2017 14:34
Moin.
1. wieviele Einträge gibt es
describe table wäre hier die Lösung
oder

Code: Alles auswählen.

i = lines( ITAB ).
Im Regelfall wird die ITAB ja noch weiter verarbeitet.
man kann dann in den Loops mitzählen
e.g.

Code: Alles auswählen.

l_false = 0.
l_true =0.
Loop at ITAB into ls_ITAB where Feld = 'abap_true'.
l_true = l_true + 1.
   :
endloop.
Loop at ITAB into ls_ITAB  where Feld = 'abap_false'.
l_false = l_false + 1.
   :
endloop.
gruß Jens

Folgende Benutzer bedankten sich beim Autor Tron für den Beitrag:
debianfan

<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Anzahl Datensätze in internen Tabellen

Beitrag von ralf.wenzel (Top Expert / 3542 / 167 / 242 ) » 25.04.2017 14:38
Wobei man dazusagen muss, dass ein LOOP mit WHERE in Standardtabellen ohne Schlüssel immer alle Sätze durchlaufen werden. Performancetechnisch ist das eine ziemliche Katastrophe.


Ralf

Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
debianfan


Re: Anzahl Datensätze in internen Tabellen

Beitrag von debianfan (ForumUser / 78 / 59 / 0 ) » 25.04.2017 14:46
Das ist eine interne Tabelle - da geht select nicht :-(
Ich weiß viel - aber nicht alles - deswegen lerne ich gern dazu & bin für Hinweise von erfahrenen ITlern immer dankbar.

Re: Anzahl Datensätze in internen Tabellen

Beitrag von Tron (Top Expert / 1187 / 22 / 274 ) » 25.04.2017 14:50
...
Ok.
geht auch so :

Code: Alles auswählen.

l_false = 0.
l_true =0.
Loop at ITAB into ls_ITAB.
if ls_ITAB-feld = 'abap_true'.
    l_true = l_true + 1.
else.
    l_false = l_false + 1.
endif.

   :
endloop.


<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Anzahl Datensätze in internen Tabellen

Beitrag von black_adept (Top Expert / 3412 / 66 / 656 ) » 25.04.2017 15:19
ralf.wenzel hat geschrieben:Wobei man dazusagen muss, dass ein LOOP mit WHERE in Standardtabellen ohne Schlüssel immer alle Sätze durchlaufen werden. Performancetechnisch ist das eine ziemliche Katastrophe
Grundsätzlich zwar richtig - aber erst ab einer nicht unerheblichen Größe relevant, so dass sich die "ziemliche Katastrophe" meist doch stark relativiert.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Anzahl Datensätze in internen Tabellen

Beitrag von debianfan (ForumUser / 78 / 59 / 0 ) » 25.04.2017 16:24
Danke Euch allen - das wars - simpel :-)

:up:
Ich weiß viel - aber nicht alles - deswegen lerne ich gern dazu & bin für Hinweise von erfahrenen ITlern immer dankbar.

Re: Anzahl Datensätze in internen Tabellen

Beitrag von ralf.wenzel (Top Expert / 3542 / 167 / 242 ) » 25.04.2017 17:42
black_adept hat geschrieben:
ralf.wenzel hat geschrieben:Wobei man dazusagen muss, dass ein LOOP mit WHERE in Standardtabellen ohne Schlüssel immer alle Sätze durchlaufen werden. Performancetechnisch ist das eine ziemliche Katastrophe
Grundsätzlich zwar richtig - aber erst ab einer nicht unerheblichen Größe relevant, so dass sich die "ziemliche Katastrophe" meist doch stark relativiert.
Naja, ich versuche das immer etwas globaler zu sehen - mein aktuelles Projekt zeigt wieder, dass Programmierer eine Methode immer wieder anwenden. Daher sage ich lieber "bitte nur sortierte Tabellen", dabei können sie nix falsch machen. Macht man das nicht, hat man nachher auch riesige Standardtabellen ohne jeglichen Index.


Ralf

Re: Anzahl Datensätze in internen Tabellen

Beitrag von Haubi (Expert / 608 / 13 / 27 ) » 26.04.2017 10:55
Könnte ein Fall für FILTER sein, wenn man sich nicht zu schade ist, einen Sekundärschlüssel zu benutzen... :wink:

Code: Alles auswählen.

TYPES:
  BEGIN OF lst_names,
    name TYPE string,
    tf   TYPE abap_bool,
  END OF lst_names,

  ltt_names TYPE STANDARD TABLE OF lst_names
              WITH DEFAULT KEY
              WITH NON-UNIQUE SORTED KEY key_tf COMPONENTS tf.

START-OF-SELECTION.

  DATA(lt_names) = VALUE ltt_names(
                            ( name = |Schulze|  tf = abap_true )
                            ( name = |Schmidt|  tf = abap_true )
                            ( name = |Meyer|    tf = abap_false )
                            ( name = |Müller|   tf = abap_true )
                            ).
  DATA(lv_true)   = lines( FILTER #( lt_names USING KEY key_tf WHERE tf = abap_true  ) ).
  DATA(lv_false)  = lines( FILTER #( lt_names USING KEY key_tf WHERE tf = abap_false ) ).

  WRITE: / lv_true, / lv_false.
Sollte aufgrund des Schlüssels auch bei großen Datenmengen nicht allzu langsam sein.

Grüße,
Haubi
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Re: Anzahl Datensätze in internen Tabellen

Beitrag von ralf.wenzel (Top Expert / 3542 / 167 / 242 ) » 26.04.2017 11:17
Aber erst ab 7.40, oder?

Ralf

Re: Anzahl Datensätze in internen Tabellen

Beitrag von Haubi (Expert / 608 / 13 / 27 ) » 26.04.2017 11:34
ralf.wenzel hat geschrieben:Aber erst ab 7.40, oder?

Ralf
Moin Ralf.

Yo, da kam meines Wissens der Filter dazu. Davor bist Du gekniffen, da hilft nur der LOOP mit den bereits beschriebenen Nachteilen.

Grüße,
Haubi
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Re: Anzahl Datensätze in internen Tabellen

Beitrag von ewx (Top Expert / 4246 / 200 / 449 ) » 26.04.2017 11:52
Und jetzt noch eine spezielle 740er generelle Lösung (von der ich die Laufzeit lieber gar nicht messen möchte...)[An Haubis Beispieldaten angelehnt] :

Code: Alles auswählen.

  
TYPES: BEGIN OF stf,
        tf    TYPE abap_bool,
        count TYPE i,
       END OF stf,
       ttf TYPE SORTED TABLE OF stf WITH UNIQUE KEY tf.

DATA(sums) = VALUE ttf( FOR GROUPS grp OF <name> IN lt_names
                        WHERE ( name IS NOT INITIAL )
                        GROUP BY ( tf = <name>-tf )
                          ( tf    = grp
                            count = REDUCE #( INIT i = 0
                                              FOR name IN lt_names
                                              WHERE ( tf = grp )
                                              NEXT i = i + 1 ) ) ).

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
Tron


Re: Anzahl Datensätze in internen Tabellen

Beitrag von ewx (Top Expert / 4246 / 200 / 449 ) » 26.04.2017 15:56
...ich wollte es jetzt doch mal wissen... :D
Ich habe einmal 100.000 und einmal 1.000.000 Datensätze generiert und die einzelnen Varianten mit der SAT ausgewertet:

Code: Alles auswählen.

              100.000    1.000.000
Haubi FILTER     77s        778s
Enno  REDUCE     36s        449s
Tron  LOOP       33s        343s	  
Also: Nicht auf Teufel komm raus die neuen Sprachelemente verwenden, nur weil's geht. :)
Zumal die häufig für mich nicht auf den ersten Blick logisch sind. Ein Loop mit ein paar sprechenden Zeile ist vielleicht einfacher zu verstehen.

Code: Alles auswählen.

REPORT
PARAMETERS p type i DEFAULT 100000.

CLASS help DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS rnd_name RETURNING VALUE(name) TYPE string.
    CLASS-METHODS rnd_bool RETURNING VALUE(tf) TYPE boolean.
    CLASS-METHODS class_constructor.
    CLASS-METHODS p01.
    CLASS-METHODS p02.
    CLASS-METHODS p03.
  PROTECTED SECTION.
    CLASS-DATA rnd  TYPE REF TO cl_abap_random.
    TYPES:
      BEGIN OF lst_names,
        name TYPE string,
        tf   TYPE abap_bool,
      END OF lst_names,

      ltt_names TYPE STANDARD TABLE OF lst_names
                  WITH DEFAULT KEY
                  WITH NON-UNIQUE SORTED KEY key_tf COMPONENTS tf.
    CLASS-DATA names TYPE ltt_names.
ENDCLASS.

CLASS help IMPLEMENTATION.
  METHOD class_constructor.
    rnd   = cl_abap_random=>create( ).
    names = VALUE ltt_names( FOR i = 1 THEN i + 1 WHILE i <= p
                            ( name = help=>rnd_name( )  tf = help=>rnd_bool( ) ) ).

  ENDMETHOD.

  METHOD rnd_name.
    DATA(len) = rnd->intinrange( low = 5 high = 40 ).
    DO len TIMES.
      DATA(pos) = rnd->intinrange( low = 0 high = 25 ).
      name = name && sy-abcde+pos(1).
    ENDDO.
  ENDMETHOD.

  METHOD rnd_bool.
    CASE rnd->intinrange( low = 0 high = 1 ).
      WHEN 0.
        tf = abap_false.
      WHEN 1.
        tf = abap_true.
    ENDCASE.
  ENDMETHOD.

  METHOD p01.
    TYPES:
      BEGIN OF stf,
        tf    TYPE abap_bool,
        count TYPE i,
      END OF stf,
      ttf TYPE SORTED TABLE OF stf WITH UNIQUE KEY tf.

    DATA(sum) = VALUE ttf( FOR GROUPS grp OF <name> IN names
                           WHERE ( name IS NOT INITIAL )
                           GROUP BY ( tf = <name>-tf )
                            ( tf    = grp
                              count = REDUCE #( INIT i = 0
                                                FOR name IN names
                                                WHERE ( tf = grp )
                                                NEXT i = i + 1 ) ) ).
*    cl_demo_output=>display_data( sum ).
  ENDMETHOD.
  METHOD p02.
    DATA(lv_true)   = lines( FILTER #( names USING KEY key_tf WHERE tf = abap_true  ) ).
    DATA(lv_false)  = lines( FILTER #( names USING KEY key_tf WHERE tf = abap_false ) ).

*    DATA(out) = cl_demo_output=>new( ).
*    out->write( lv_true )->write( lv_false )->display( ).
  ENDMETHOD.

  METHOD p03.

    DATA lv_true  TYPE i.
    DATA lv_false TYPE i.

    LOOP AT names INTO DATA(name).
      CASE name-tf.
        WHEN abap_true.  ADD 1 TO lv_true.
        WHEN abap_false. ADD 1 TO lv_false.
      ENDCASE.
    ENDLOOP.

*    DATA(out) = cl_demo_output=>new( ).
*    out->write( lv_true )->write( lv_false )->display( ).
  ENDMETHOD.

ENDCLASS.

START-OF-SELECTION.

  help=>p01( ).
  help=>p02( ).
  help=>p03( ).

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
Daniel


Re: Anzahl Datensätze in internen Tabellen

Beitrag von ewx (Top Expert / 4246 / 200 / 449 ) » 26.04.2017 16:24
Ich habe noch mal den Vorschlag von Tron verwendet (zwei LOOPs mit WHERE anstelle ein LOOP mit CASE).
Diese Variante ist tatsächlich noch schneller, als LOOP-CASE...

Code: Alles auswählen.

                   100.000    1.000.000
Haubi FILTER          77s        778s
Enno  REDUCE          36s        449s
Enno  1-LOOP-CASE     33s        343s   
Tron  2-LOOP-WHERE    27s        278s
Das überrascht mich tatsächlich, denn ich hätte gedacht, dass ein LOOP immer besser ist, als zwei...

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
Thomas R.



Aktuelle Forenbeiträge

NAST in Smartforms
vor 20 Stunden von L0w-RiDer 2 / 23
Zuordnen einer HU zu einer Lieferung
vor 20 Stunden von SayAndre 8 / 4970
Append mehrer Zeilen mit VALUE #
vor 21 Stunden von Romaniac gelöst 11 / 5951
Funktionsbaustein ALSM_EXCEL_TO_INTERNAL_TABLE
vor 21 Stunden von Romaniac gelöst 7 / 2047

Vergleichbare Themen

Maximale Anzahl Datensätze im Grid
von ewx » 27.08.2015 19:17
Bestimmte Anzahl Datensätze in ITAB schreiben für Anzeige.
von Mavrix » 18.01.2007 15:32
Datensätze einer internen Tabelle zählen
von GAST » 16.11.2004 14:48
Anzahl Zeilen in einer internen Tabelle
von Otscho » 31.07.2007 12:59
Tabellen, Speicherplatz und gelöschte Datensätze
von herr mb » 12.08.2013 10:24