SELECT-FROM-Befehl und Löschen von Einträgen

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

SELECT-FROM-Befehl und Löschen von Einträgen

Beitrag von lr_1504 (ForumUser / 1 / 0 / 0 ) » 10.01.2020 16:53
Hallo,

ich bin ABAP-Anfänger und habe folgenden Code:

Code: Alles auswählen.

SELECT att1 att2 datum1 datum2 typ att3 att4
  FROM tabelle INTO CORRESPONDING FIELDS OF TABLE gt_tabelle
  WHERE att1 = pa_att1 AND ( typ = '1' OR typ = '2' )
  ORDER BY typ ASCENDING datum1 DESCENDING datum2 ASCENDING.
Ich möchte am Ende jeweils eine Ausgabe des aktuellsten Tabelleneintrags (datum1) von typ=1 und typ=2 haben. Sofern mehrere Einträge gleichen Datums vorhanden sind, soll auf datum2 zurückgegriffen werden, das in der Zukunft liegen kann, aber nicht muss.

Wie ist es möglich, dass mir in der Tabelle nur noch diese aktuellsten Einträge angezeigt werden? Meine Idee war der Befehl SELECT DISTINCT MIN, damit komme ich allerdings nicht weiter.

Vielen Dank für eure Hilfe!


Re: SELECT-FROM-Befehl und Löschen von Einträgen

Beitrag von DeathAndPain (Top Expert / 1423 / 153 / 325 ) » 10.01.2020 18:47
Nur im SQL (also im SELECT) wirst Du diese Anforderung nicht verbacken bekommen, sondern Du musst erst mal aus der Datenbank lesen und dann Dein Ziel in der internen Tabelle erreichen.

Zunächst einmal möchte ich Dir aber nahelegen, den OR aus der WHERE-Klausel durch IN zu ersetzen, da er Dir als OR den Indexzugriff ruiniert (abhängig davon, was für Indizes Deine Datenbanktabelle hat) und sich auch schlechter liest. Also:

Code: Alles auswählen.

SELECT att1 att2 datum1 datum2 typ att3 att4
  FROM tabelle INTO CORRESPONDING FIELDS OF TABLE gt_tabelle
  WHERE att1 = pa_att1 
    AND typ IN ('1','2')
  ORDER BY typ ASCENDING datum1 DESCENDING datum2 ASCENDING.
Sodann ist der Zusammenhang zwischen Deinem SELECT mit den komischen ORDERs und Deiner Anforderung auch nicht wirklich erkennbar. Wenn ich Dich richtig verstehe, dann sollte der folgende Code (nach Deinem SELECT) Deine Anforderung erfüllen:

Code: Alles auswählen.

data: ergebnis_typ_1 like line of gt_tabelle,
      ergebnis_typ_2 like line of gt_tabelle.

sort gt_tabelle by typ datum1 descending datum2 descending.

ergebnis_typ_1 = gt_tabelle[ typ = '1' ].
ergebnis_typ_2 = gt_tabelle[ typ = '2' ].
Die beiden Zuweisungen am Ende liefern die jeweils erste Zeile des jeweiligen Typs, und aufgrund des davor stehenden SORTs sollte das die sein, die Deiner Anforderung entspricht.

Wenn nicht, erläutere Deine Anforderung bitte noch einmal genauer. Generell ist es auch hilfreich, bei jeglichen Codefragmenten die genaue Typisierung der Felder bzw. Tabellen mitzuliefern.

Seite 1 von 1

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und besseren Inhalt:

Vergleichbare Themen

Löschen von Einträgen in einer Customizingtabelle
von LyNx » 10.06.2008 11:25
Manuelles Löschen aller Einträgen einer Customizingtabelle
von LyNx » 12.06.2008 09:14
SQL SELECT-BEFEHL
von hmaxi96 » 02.11.2015 12:07
Typecast bei Select-Befehl
von Senshi » 05.11.2007 16:17