Summieren bestimmter Felder in interner Tabelle

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

Getting started ... Alles für einen gelungenen Start.
7 Beiträge • Seite 1 von 1
7 Beiträge Seite 1 von 1

Summieren bestimmter Felder in interner Tabelle

Beitrag von kaufikauf (ForumUser / 15 / 4 / 0 ) »
Hallo an alle hier!

Ich habe folgendes Problem:

Meine itab sieht folgendermaßer aus:

ID MENGE
22 50
22 30
25 10

Kurz vor der Ausgabe per ALV, werden Spalten mit doppelter ID gelöscht per DELETE ADJACENT DUPLICATES.

Wie kann ich vorher die Menge aller ID´s summieren? Ich konnte bisher erarbeiten dass das wohl mit Loop gehen soll, aber das übersteigt leider meinen Horizont.

Ich bedanke mich im Voraus für die Hilfe!

LG

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


Re: Summieren bestimmter Felder in interner Tabelle

Beitrag von wreichelt (Top Expert / 1031 / 29 / 188 ) »
Hallo,

du kannst ja mittels Collect die Einträge in der Tabelle selbst schon zusammenfassen.
Dadurch wird auch kein Delete mehr benötigt.

Gruß
Wolfgang

Re: Summieren bestimmter Felder in interner Tabelle

Beitrag von z_mue (ForumUser / 2 / 0 / 0 ) »

Code: Alles auswählen.

DATA: summe TYPE p.
LOOP AT itab INTO wa.
summe = summe + wa-menge.
ENDLOOP.
:)

Re: Summieren bestimmter Felder in interner Tabelle

Beitrag von kaufikauf (ForumUser / 15 / 4 / 0 ) »
z_mue hat geschrieben:

Code: Alles auswählen.

DATA: summe TYPE p.
LOOP AT itab INTO wa.
summe = summe + wa-menge.
ENDLOOP.
:)
Aber wie kann ich jezt die Summe pro ID bilden?

Re: Summieren bestimmter Felder in interner Tabelle

Beitrag von Pyro (Specialist / 121 / 14 / 18 ) »
Stichwort: Gruppenstufenverarbeitung;)

Code: Alles auswählen.

LOOP AT XXX.
  
  AT NEW ID.
     clear SUM.
  ENDAT. 

  SUM = WERT1 + WERT2.

ENDLOOP.

Re: Summieren bestimmter Felder in interner Tabelle

Beitrag von z_mue (ForumUser / 2 / 0 / 0 ) »

Code: Alles auswählen.

DATA: itab_neu LIKE itab_alt.
LOOP AT itab_alt INTO wa.
COLLECT wa INTO itab_neu.
ENDLOOP.
Wäre jetzt mein Lösungsansatz gewesen.
Bei der Gruppenverarbeitung musst du nur vorher noch sortieren. Was jetzt perfomanter ist, weiß ich nicht. :?

Re: Summieren bestimmter Felder in interner Tabelle

Beitrag von PeterPaletti (Specialist / 336 / 29 / 96 ) »
Einmal mit COLLECT Befehl.

Code: Alles auswählen.

REPORT zz_test_15.
TYPES: BEGIN OF gt_table,
       id(2) TYPE c,
       menge TYPE i,
       END OF gt_table,
       gt_table_t TYPE TABLE OF gt_table.

DATA: li_table TYPE gt_table_t,
      ls_table TYPE gt_table.

ls_table-id = 22.
ls_table-menge = 50.
COLLECT ls_table INTO li_table.

ls_table-id = 22.
ls_table-menge = 49.
COLLECT ls_table INTO li_table.

ls_table-id = 23.
ls_table-menge = 33.
COLLECT ls_table INTO li_table.

LOOP AT li_table INTO ls_table.
  WRITE: / ls_table-id, ls_table-menge.
ENDLOOP.
Die Ausgabe ist:
ID 22 Menge 99
ID 23 Menge 33.

Oder aber Du agierst mit 2 Tabellen und fasst über die ID die Mengen zusammen.

Code: Alles auswählen.

REPORT zz_test_15.
TYPES: BEGIN OF gt_table,
       id(2) TYPE c,
       menge TYPE i,
       END OF gt_table,
       gt_table_t TYPE TABLE OF gt_table.

DATA: li_table  TYPE gt_table_t,
      li_table2 Type gt_table_t,
      ls_table TYPE gt_table.
field-symbols: <fs_table> type gt_table.

ls_table-id = 22.
ls_table-menge = 50.
append ls_table TO li_table.

ls_table-id = 22.
ls_table-menge = 49.
append ls_table TO li_table.

ls_table-id = 23.
ls_table-menge = 33.
append ls_table TO li_table.

LOOP AT li_table INTO ls_table.
  read table li_table2 assigning <fs_table>
  with key id = ls_table-id.
  if sy-subrc ne 0.
    append ls_table to li_table2.
  else.
    <fs_table>-menge =  <fs_table>-menge + ls_table-menge.
  endif.
ENDLOOP.

Loop at li_table2 assigning <fs_table>.
  write:/ <fs_table>-id, <fs_table>-menge.
endloop.
das ergebnis ist dasselbe.

Oder aber du benutzt 2 Tabellen und die Summenfunktion.

Code: Alles auswählen.

REPORT zz_test_15.
TYPES: BEGIN OF gt_table,
       id(2) TYPE c,
       menge TYPE i,
       END OF gt_table,
       gt_table_t TYPE TABLE OF gt_table.

DATA: li_table  TYPE gt_table_t,
      li_table2 type gt_table_t,
      ls_table TYPE gt_table.


ls_table-id = 22.
ls_table-menge = 50.
append ls_table TO li_table.

ls_table-id = 22.
ls_table-menge = 49.
append ls_table TO li_table.

ls_table-id = 23.
ls_table-menge = 33.
append ls_table TO li_table.

loop at li_table into ls_table.
  at end of id.
    sum.
    append ls_table to li_table2.
  endat.
  endloop.
Als eine Variante zum letzten Beispiel könnte man sich auch die Zeilen-Indizes merken, die nicht in die AT END/ENDAT Struktur durchlaufen, die Ausgabetabelle in der AT END/ENDAT Struktur ändern und im Nachgang die gemerkten Zeilen löschen.

Code: Alles auswählen.

REPORT zz_test_15.
TYPES: BEGIN OF gt_table,
       id(2) TYPE c,
       menge TYPE i,
       END OF gt_table,
       gt_table_t TYPE TABLE OF gt_table,
       BEGIN OF gt_index,
       tabix TYPE sy-tabix,
       END OF gt_index,
       gt_index_t TYPE TABLE OF gt_index.

DATA: li_table  TYPE gt_table_t,
      li_index TYPE gt_index_t,
      ls_index TYPE gt_index,
      ls_table TYPE gt_table,
      ld_sum   TYPE c.


ls_table-id = 22.
ls_table-menge = 50.
APPEND ls_table TO li_table.

ls_table-id = 22.
ls_table-menge = 49.
APPEND ls_table TO li_table.

ls_table-id = 23.
ls_table-menge = 33.
APPEND ls_table TO li_table.

LOOP AT li_table INTO ls_table.
  ls_index-tabix = sy-tabix.
  CLEAR ld_sum.
  AT END OF id.
    SUM.
    MODIFY li_table FROM ls_table INDEX ls_index-tabix.
    ld_sum = 'X'.
  ENDAT.
  IF ld_sum IS INITIAL.
    APPEND ls_index TO li_index.
  ENDIF.
ENDLOOP.

LOOP AT li_index INTO ls_index.
  DELETE li_table INDEX ls_index-tabix.
ENDLOOP.

So jetzt habe ich mir genug den Kopf zerbrochen.
Gruß
Peter

Folgende Benutzer bedankten sich beim Autor PeterPaletti für den Beitrag (Insgesamt 2):
kaufikaufwexpress


Seite 1 von 1

Vergleichbare Themen

2
Antw.
4111
Views
Felder einer interner Tabelle summieren
von Marc K. » 06.03.2012 08:09 • Verfasst in ABAP® für Anfänger
6
Antw.
3735
Views
Key Felder von interner Tabelle auf dem ALV
von thesaint » 14.07.2005 16:32 • Verfasst in ABAP Objects®
3
Antw.
1571
Views
Summieren von Zeilen in einer internen Tabelle
von kaim77 » 21.01.2020 13:03 • Verfasst in ABAP® für Anfänger
13
Antw.
1464
Views
Report Summieren der Werte einer Internen Tabelle
von ArjenR » 03.01.2020 09:02 • Verfasst in ABAP® für Anfänger
7
Antw.
4371
Views
Concatenate in interner Tabelle
von wenigerABAP » 16.09.2016 12:47 • 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

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.