Anzahl Datensätze in internen Tabellen

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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 / 84 / 64 / 0 ) »
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.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Anzahl Datensätze in internen Tabellen

Beitrag von wreichelt (Top Expert / 1046 / 30 / 192 ) »
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 / 1327 / 35 / 332 ) »
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 / 3935 / 200 / 281 ) »
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

Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Anzahl Datensätze in internen Tabellen

Beitrag von debianfan (ForumUser / 84 / 64 / 0 ) »
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 / 1327 / 35 / 332 ) »
...
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 / 4099 / 128 / 941 ) »
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 / 84 / 64 / 0 ) »
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 / 3935 / 200 / 281 ) »
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
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Anzahl Datensätze in internen Tabellen

Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
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 / 3935 / 200 / 281 ) »
Aber erst ab 7.40, oder?

Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Anzahl Datensätze in internen Tabellen

Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
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 / 4850 / 313 / 642 ) »
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 / 4850 / 313 / 642 ) »
...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 / 4850 / 313 / 642 ) »
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.


Vergleichbare Themen

2
Antw.
1708
Views
Maximale Anzahl Datensätze im Grid
von ewx » 27.08.2015 19:17 • Verfasst in ABAP® Core
2
Antw.
1845
Views
Bestimmte Anzahl Datensätze in ITAB schreiben für Anzeige.
von Mavrix » 18.01.2007 15:32 • Verfasst in ABAP® für Anfänger
4
Antw.
3731
Views
Anzahl Zeilen in einer internen Tabelle
von Otscho » 31.07.2007 12:59 • Verfasst in ABAP® für Anfänger
2
Antw.
1951
Views
Tabellen, Speicherplatz und gelöschte Datensätze
von herr mb » 12.08.2013 10:24 • Verfasst in ABAP® für Anfänger
2
Antw.
25256
Views
Anzahl Zeilen einer internen Tabelle mit Lines
von Tanriverdi » 05.09.2008 11:35 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Rechnung: Belegspez. Adresse
vor 6 Stunden von ewx 2 / 299
Daten an Tabelle binden
vor 13 Stunden von Lukas Sanders 4 / 2164
Regex in where
vor 2 Tagen von tar 8 / 956
Programm anlegen mit Vorlage
vor 4 Tagen von DeathAndPain 2 / 746

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Rechnung: Belegspez. Adresse
vor 6 Stunden von ewx 2 / 299
Daten an Tabelle binden
vor 13 Stunden von Lukas Sanders 4 / 2164
Regex in where
vor 2 Tagen von tar 8 / 956
Programm anlegen mit Vorlage
vor 4 Tagen von DeathAndPain 2 / 746

Unbeantwortete Forenbeiträge

BUSOBJEKT zu CMIS PHIO ermitteln
vor 4 Tagen von snooga87 1 / 642
aRFC im OO-Kontext
letzen Monat von ralf.wenzel 1 / 3828
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 10251