Maximale Anzahl der Einträge in einem internen Tabelle

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

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

Maximale Anzahl der Einträge in einem internen Tabelle

Beitrag von msentaburlar (ForumUser / 16 / 2 / 0 ) »
Hallo,

ich hab jetzt eine kleine Frage und zwar ich habe eine interne Tabelle und es hat mehrere Spalten. Für mich ist aber nur eine Spalte (siehe unten Spalte 2) wichtig.

Spalte 1 Spalte 2 Spalte 3 .....
Berlin
Madrid
Frankfurt
Wien
Berlin
Berlin
Paris
Wien
.
.
.
Wie man in der Spalte 2 sieht, gibt es da verschieden Städte. Ich möchte jetzt hier folgendes finden und zwar welche Stadt und wie oft steht in dieser Tabelle?
Ich freue mich für die Rückmeldung

Viele Grüße
msentaburlar

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



Re: Maximale Anzahl der Einträge in einem internen Tabelle

Beitrag von msentaburlar (ForumUser / 16 / 2 / 0 ) »
Hallo wreichelt,

danke für die Antwort, aber ich bin neue in Abap und brauche konkrete Beispiel Code. Ich habe schon über Hilfe Abap vieles gelesen, aber ich konnte es trotzdem nicht bis jetzt nicht schaffen.

Viele Grüße
msentaburlar

Re: Maximale Anzahl der Einträge in einem internen Tabelle

Beitrag von ewx (Top Expert / 4849 / 313 / 642 ) »
Das beste wäre es, wenn du es direkt über den Select machen könntest:

Code: Alles auswählen.

SELECT city1, COUNT( * ) AS cnt 
  FROM adrc 
  INTO TABLE @DATA(t) 
 GROUP BY city1 
 ORDER BY cnt DESCENDING.
cl_demo_output=>display_data( t ).
Wenn die interne Tabelle gegeben ist: In dem Link von Wolfgang sind ja jede Menge Codebeispiele vorhanden...

eine andere Möglichkeit wäre, mit einem LOOP über die Tabelle alle vorkommenden Orte in einer anderen Tabelle zu sammeln.

Code: Alles auswählen.

LOOP at itab.

Lies Tabelle ORTE mit itab-ort.
Eintrag vorhanden?
-> nein: neuer Eintrag 
  orte-ort = itab-ort
  orte-anzahl = 1.
-> ja: orte-anzahl + 1
ENDLOOP.

Re: Maximale Anzahl der Einträge in einem internen Tabelle

Beitrag von msentaburlar (ForumUser / 16 / 2 / 0 ) »
Hallo,

es hat geklappt. Danke dir

VG

msentaburlar

Re: Maximale Anzahl der Einträge in einem internen Tabelle

Beitrag von DeathAndPain (Top Expert / 1952 / 259 / 413 ) »
Das klingt wie eine Herausforderung für black_adept: Löse dieses Problem einzeilig mit dem REDUCE-Befehl unter der Maßgabe, dass die am häufigsten auftretende Stadt nebst der Anzahl ihres Auftretens als zweispaltige Struktur zurückgeliefert wird, wobei vorher nicht bekannt ist, welche Stadt das sein wird. (Für Typisierungen sind natürlich weitere, vorhergehende Programmzeilen erlaubt.)

Auf die Schnelle weiß ich nicht, wie das bewerkstelligt werden kann, aber mein Gefühl sagt mir, dass solch REDUCE möglich ist, und die Erfahrung sagt mir, dass black_adept ihn finden kann. 😁

Wenn ich es selbst machen müsste, würde ich wahrscheinlich versuchen, zwei REDUCEs ineinander zu schachteln: Der innere erzeugt eine zweispaltige Tabelle (Stadt;Auftretensanzahl) und der äußere zieht daraus die am häufigsten auftretende Stadt nebst deren Auftretensanzahl. Das ist, wie gesagt, noch nicht zu Ende gedacht und nicht notwendigerweise der richtige oder einfachste Ansatz.

Re: Maximale Anzahl der Einträge in einem internen Tabelle

Beitrag von ewx (Top Expert / 4849 / 313 / 642 ) »
Bin mir nicht sicher, ob ich weiß, was ich da tue...
Scheint aber zu funktionieren...

Code: Alles auswählen.

  SELECT * FROM adrc INTO TABLE @DATA(adr).

  TYPES: BEGIN OF ts_city,
           city TYPE ad_city1,
           cnt  TYPE i,
         END OF ts_city,
         tt_cities TYPE sorted TABLE OF ts_city
            WITH UNIQUE KEY city
            WITH NON-UNIQUE SORTED KEY count components cnt.

  DATA(t) = VALUE tt_cities( FOR GROUPS <city> OF address
                             IN adr GROUP BY ( city = address-city1 )
             ( city = <city> cnt = REDUCE i(
                                    INIT count = 0 FOR adrline IN adr
                                    WHERE ( city1 = <city>-city )
                                    NEXT count = count + 1 ) ) ) .

  cl_demo_output=>display_data( t ).
Ist das nicht schön?
Ja, das ist nicht schön!

/edit: und definitiv ist das nicht die schnellste Variante.

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


Re: Maximale Anzahl der Einträge in einem internen Tabelle

Beitrag von DeathAndPain (Top Expert / 1952 / 259 / 413 ) »
Mir gefällt die Lösung! 😁 Wobei ich REDUCE i( INIT count = 0 nicht so mag. Ich finde es schöner, den Typ der INIT-Variable explizit anzugeben, was nebenbei den Effekt hat, dass man vorne eine Raute nutzen kann, also REDUCE #( INIT count TYPE i

"Schön" oder "nicht schön" ist eine Frage der Gewohnheit, glaube ich. Wir empfinden die Syntax als "nicht schön", weil wir sie nicht gewohnt sind. Ich kann mich noch erinnern, als ich zum ersten Mal den SWITCH-Befehl gesehen habe. Meine reflexartige Reaktion war: "Wer braucht denn sowas?" Später wollte ich ihn nicht mehr missen, aber FOR war mir definitiv zu kompliziert.

Was soll ich sagen, mittlerweile nutze ich FOR sehr gerne, hatte bis vor kurzem aber noch gehörigen Respekt vor REDUCE. An den gewöhne ich mich jetzt gerade, und Dein nettes Beispiel ist eine Anregung für mich, mich auch mal mit dem GROUPS des FOR auseinanderzusetzen, das ich bislang noch nicht auf dem Schirm habe.

Je mehr man aber selber in dieser neuen Syntax programmiert, desto besser kann man sie lesen, und ich behaupte, wer das in sein geistiges Repertoire aufgenommen hat und bei jeder sich bietenden Gelegenheit nutzt, der liest Deine Lösung einfach runter und versteht auf Anhieb, wie sie funktioniert. Es ist also nicht so, dass Deine Lösung nicht schön wäre, sondern unser Auge muss geschult werden, ihre Schönheit zu sehen. Wer dazu nicht bereit ist (und das sind leider viele), der wird natürlich immer auf dem Standpunkt beharren, dass früher alles besser gewesen ist.

Re: Maximale Anzahl der Einträge in einem internen Tabelle

Beitrag von ewx (Top Expert / 4849 / 313 / 642 ) »
ich finde es nach wie vor unglaublich schwer zu erkennen, was sich wann worauf bezieht und wann wo welche Werte in welcher Form gesetzt werden können.

Bsp: "address"
wofür benötige ich das?
Warum reicht nicht:

Code: Alles auswählen.

...FOR GROUPS <city> IN adr GROUP BY ( city = adr-city )...?

Re: Maximale Anzahl der Einträge in einem internen Tabelle

Beitrag von DeathAndPain (Top Expert / 1952 / 259 / 413 ) »
Das wird ein syntaktisches Zugeständnis an den Umstand sein, dass man GROUPS mit oder ohne Gruppenvariable (Gruppenschlüsselbindung oder Repräsentantenbindung) angeben kann. In beiden Fällen wird wohl der Einheitlichkeit halber die Workarea hinter dem GROUP BY referenziert. In Deinem Alternativbeispiel referenzierst Du stattdessen den Tabellennamen selbst. Bedenke aber, dass die Workarea nicht identisch, sondern nur konvertierbar typisiert werden muss wie eine Zeile der internen Tabelle! Das gleiche gilt auch bei LOOP AT .. GROUP BY. Ich persönlich finde es sogar redundant, wie von Dir vorgeschlagen den Tabellennamen anzugeben; beim GROUP BY eines SELECTs macht man das ja auch nicht. Von mir aus könnte man also sogar schreiben:

Code: Alles auswählen.

...FOR GROUPS <city> IN adr GROUP BY ( city )...
Aber dann würdest Du nach der Tabellenspalte gruppieren, obwohl Du bei der Repräsentantenbindung im nachfolgenden Code mit der Workarea-Spalte als Gruppenspalte arbeitest, die womöglich ganz anders heißt! Das wird der SAP nicht gefallen haben. Deshalb (so meine Vermutung) haben sie gesagt, die GROUP BY-Klausel muss sich immer auf die Spaltennamen der Workarea-Variable beziehen, aus der Dein Gruppenfeld dann Spaltennamen und Typisierung erbt. Und daraus folgt, dass die Workarea-Variable immer angegeben werden muss, auch wenn ihr Wert bei der Gruppenschlüsselbindung stets initial ist.

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


Seite 1 von 1

Vergleichbare Themen

4
Antw.
1887
Views
Einträge aus einer Internen Tabelle auslesen und wegschreiben
von Kai555 » 14.05.2024 15:21 • Verfasst in ABAP® für Anfänger
4
Antw.
3727
Views
Anzahl Zeilen in einer internen Tabelle
von Otscho » 31.07.2007 12:59 • Verfasst in ABAP® für Anfänger
2
Antw.
25247
Views
Anzahl Zeilen einer internen Tabelle mit Lines
von Tanriverdi » 05.09.2008 11:35 • Verfasst in ABAP® für Anfänger
0
Antw.
624
Views
Maximale Einträge Produkthierarchie
von SAP_ENTWICKLER » 20.03.2019 10:26 • Verfasst in ABAP® Core
3
Antw.
1738
Views
Maximale Anzahl Codingzeilen
von ralf.wenzel » 02.09.2024 09:41 • Verfasst in ABAP® Core

Ü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

Regex in where
vor 2 Stunden von black_adept 2 / 55
Programm anlegen mit Vorlage
vor 9 Stunden von DeathAndPain 2 / 110
IT0024 Qualifikationen CP-ID
vor 9 Stunden von DeathAndPain 2 / 351
BUSOBJEKT zu CMIS PHIO ermitteln
vor 11 Stunden von snooga87 1 / 83

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

Regex in where
vor 2 Stunden von black_adept 2 / 55
Programm anlegen mit Vorlage
vor 9 Stunden von DeathAndPain 2 / 110
IT0024 Qualifikationen CP-ID
vor 9 Stunden von DeathAndPain 2 / 351
BUSOBJEKT zu CMIS PHIO ermitteln
vor 11 Stunden von snooga87 1 / 83

Unbeantwortete Forenbeiträge

BUSOBJEKT zu CMIS PHIO ermitteln
vor 11 Stunden von snooga87 1 / 83
aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3260
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9821