Anzahl von bestimmten Einträgen innerhalb Itab

Getting started ... Alles für einen gelungenen Start.

Anzahl von bestimmten Einträgen innerhalb Itab

Postby Ylvi4564 » Mon Dec 02, 2002 6:22 pm

Hallo,
ich habe folgendes problem: Ich habe zwei interne Tabellen. Die eine ist quiasi eine Prüftabelle und die andere hat beliebiegviele wiederholungen der prüftabellenwerte(nenen wir sie temp_itab). Nun möchte ich zählen wie oft die einzelnen werte in meine "temp_itab" vorkommen. Bei SQL macht man das doch mit select Count(*) ... for all entries in 'PRÜFTABELLE'. Hat jemand ne lösung die für Interne tabellen???
:oops:
Grüßle Sternschnuppe
Ylvi4564
.
.
 
Posts: 1
Joined: Mon Dec 02, 2002 6:22 pm

Postby Jarne2165 » Mon Dec 02, 2002 7:07 pm

Hi, Sternschnuppe!
vielleicht kann dir da der befehl collect weiterhelfen. Die F1 hilfe zu dem Befehl ist ziemlich aufschlußreich.

Ciao Jan 8)
Jarne2165
..
..
 
Posts: 42
Joined: Mon Dec 02, 2002 1:25 pm

Postby Quinn1225 » Fri Jan 03, 2003 11:55 am

Der COLLECT ist eigentlich eher zum Verdichten von numerischen Felder des Zeilentyp gedacht (die nicht Teil des Schlüssels sind). Wenn ich das Problem richtig verstanden habe könnte auch ein Loop helfen. Beispiel
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. LOOP AT itab WHERE condition.
  2. IF sy-tabix <> soll.
  3.    ...
  4.  
GeSHi ©

Die WHERE-Klausel entspricht weitgehend der des SELECT. Auf internen Tabellen sind die Aggregatfunktionen leider nicht möglich.
Quinn1225
..
..
 
Posts: 30
Joined: Thu Jan 02, 2003 4:16 pm

Postby Willy1492 » Fri Jan 03, 2003 12:23 pm

DRABAP hat geschrieben:Der COLLECT ist eigentlich eher zum Verdichten von numerischen Felder des Zeilentyp gedacht (die nicht Teil des Schlüssels sind). Wenn ich das Problem richtig verstanden habe könnte auch ein Loop helfen. Beispiel
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. LOOP AT itab WHERE condition.
  2. IF sy-tabix <> soll.
  3.    ...
  4.  
GeSHi ©

Meinst Du LOOP AT temp_itab WHERE ... innerhalb von LOOP AT itab ...?
Und die sy-tabix-Abfrage nach ENDLOOP habe ich auch nicht ganz verstanden.
(Wenn es auch Einträge in itab gibt ohne passende Einträge in temp_itab (also temp_itab ohne zur WHERE-Bedingung passende Einträge), wird SY-TABIX nicht verändert.

COLLECT in eine neue Tabelle ist je nach Anzahl Einträge in den beiden Tabellen (und Anzahl von Wiederholungen in temp_itab) effektiver als die von Dir vorgeschlagene Lösung (vorausgesetzt, ich habe sie halbwegs richtig interpretiert), da nur einmal über temp_itab geloopt werden muß. Die F1-Hilfe zu COLLECT sollte man dazu aber unbedingt mal gelesen haben.

Anders sieht es aus, wenn beide itabs sowieso schon entsprechend sortiert sind.
Da gibt es in der SE30 unter Tipps&Tricks entsprechende Hinweise, wie man die itabs noch effektiver prozessieren könnte. (Im Prinzip nur ein LOOP über itab und innerhalb der LOOP mit READ TABLE temp_itab INDEX ... ab zuletzt prozessiertem Index von temp_itab weitermachen.)

Frank
Willy1492
....
....
 
Posts: 581
Joined: Tue Dec 03, 2002 4:44 pm

Postby Quinn1225 » Fri Jan 03, 2003 1:38 pm

@all: habe das Problem falsch verstanden! Die Lösung mit dem COLLECT und der zweiten Tabelle ist genau das Richtige! Mein Vorschlag simuliert lediglich die Aggregatfunktion COUNT( ) auf einer internen Tabelle. Dabei ist sind jedoch noch zwei weitere Fehler zu bemängeln: Zum einen sollte man den Zusatz TRANSPORTING NO FIELDS verwenden. Zum anderen muß man die Anzahl die Anzahl der Schleifendurchäufe selbst zählen, da sy-tabix nach dem Schleifendurchlauf natürlich nicht die Anzahl der Durchläufe enthält. Aber wie gesagt, das ganze löst nicht das Problem hier.[/u]
Quinn1225
..
..
 
Posts: 30
Joined: Thu Jan 02, 2003 4:16 pm


Return to ABAP® für Anfänger

Who is online

Users browsing this forum: No registered users and 1 guest