Extrahieren der eindeutigen Werte aus einer internen Tabelle
Was ist der effizienteste Weg zu extrahieren Sie die eindeutige Werte aus einer Spalte oder mehrere Spalten einer internen Tabelle?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie 7.40 SP08 oder oben können Sie einfach verwenden Sie die inline-syntax, zum füllen der Zieltabelle (keine Notwendigkeit für LOOP GROUP BY):
Dieser funktioniert mit jedem Typ der Zieltabelle.
Für eine ältere Version verwenden:
Den oben genannten arbeiten mit sortierten Tabellen als gut. Obwohl ich nicht empfehlen die Verwendung von sortierten Tabellen für diesen Zweck, es sei denn, Sie wirklich sicher sind, dass nur ein paar Zeilen in der Ergebnismenge.
Die nicht-null -
sy-subrc
vonINSERT
wird einfach ignoriert. Keine Notwendigkeit zu tun, der key lookup-zweimal (einmal für Existenz-check, einmal für das einfügen).Wenn das Ziel muss sein, eine STANDARD-TABELLE und Sie haben eine , alte ABAP-stack, können Sie alternativ auch
Diese bietet das gleiche Verhalten wie bei einer sortierten Tabelle, aber mit einer standard-Tabelle.
Ob dies effizienter als SORTIEREN /DELETE ADJACENT DUPLICATES hängt von der Anzahl der doppelten Einträge in itab. Das mehr doppelte Einträge vorhanden sind, desto schneller werden die oben genannten Lösung ist, weil es vermeidet die unnötige fügt in die Zieltabelle. Aber auf der anderen Seite hängt sind schneller als Beilagen.
Vor der ABAP 7.40 s SP08 release, die effizienteste Art der Gewinnung von eindeutigen Werte aus einer internen Tabelle oder itab ist die folgende:
Prüfung des Vorhandenseins eines bestimmten
<ls_itab>-value
vor dem hinzufügen der internen Tabelle ist ein weiterer Garant für Einzigartigkeit, sondern wahrscheinlich viel mehr rechenintensive beim einfügen in eine standard-Tabelle. Für sortierte oder Hash-Ziel-Tabellen, Verwendung:Beachten Sie, dass mit der ersten Methode, aber das einfügen der Werte in eine dummy-Tabelle, gefolgt von einem
APPEND LINES OF lt_dummy INTO lt_sorted_values
kann schneller sein, aber die Größe der zwischen-Tabellen weiterverfolgen kann, die.Als ABAP - 7.40 Support Package 08 jedoch die
GROUP BY
loops einen besseren Weg bieten, um zu extrahieren eindeutige Werte. Wie der name andeutet, diese Funktion ähnlich zu SQL istGROUP BY
. Zum Beispiel wird der folgende code-Auszug einzigartiges Projekt, das die zahlen aus einer internen Tabelle:Die gleiche Logik, erweitert werden kann, abrufen einzigartige Paare, wie der zusammengesetzte Primärschlüssel der
EKPO
TabelleEBELN
("Einkaufsbeleg",po_nr
) undEBELP
("Artikelnummer des Kauf Dokument",po_item
):Nach Horst Keller, einer der SAP-Designer der neuen ABAP release 7.40, die Leistung von GROUP BY-Schleifen wird wahrscheinlich der gleiche sein wie eine manuelle Durchführung dieser Schleifen. Je nachdem, wie (in)effizient wie eine benutzerdefinierte Schleife implementiert ist, kann Sie sogar schneller sein. Beachten Sie, dass diese schneller sein wird als die zwei Methoden, die oben gegeben werden, für Systeme, auf denen die
GROUP BY
loops sind nicht verfügbar.Beachten Sie, dass in den meisten Fällen Abfragen an die Datenbank zurück
DISTINCT
Werte viel schneller und performance-Weise tun, dass die Wehen alle ABAP-code, der verwendet den internen Tabellen aus dem Wasser, besonders on HANA Systemen.Wie über dieses?