subquery oder andere Lösung

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

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

subquery oder andere Lösung

Beitrag von meistercoach (ForumUser / 22 / 13 / 0 ) »
Hallo alle zusammen,

ich habe folgendes Problem.

In einer Tabelle habe ich diverse Kennzahlen, calyear und ein Merkmal Berechnungslauf. Zu einem Kalenderjahr existieren mehrere Berechnungslaufes.

Ich benötige alle Kennzahlen zu dem letzten Kalenderjahr und dem höchsten Berechnungslauf.

Mit nachfolgendem SQL-Statement kann ich den Wert letztes calyear und größten Wert des Bererchnungslaufes ermitteln.

Code: Alles auswählen.

  SELECT DISTINCT
     
    calyear
    max( Berechnungslauf ) as Berechnungslauf

  from Tabelle_a
  where calyear =
  ( SELECT max( calyear ) from Tabelle_a )
  GROUP BY
    calyear.

Muss ich mir das Ergebnis in eine interne Tabelle schreiben und dann über for all entries erenut die Tabelle abfragen?
Also ist nachfolgendes die beste Lösung?

Code: Alles auswählen.

  SELECT DISTINCT
     
    calyear
    max( Berechnungslauf ) as Berechnungslauf

  INTO CORRESPONDING FIELDS OF TABLE LT_zeit
  from Tabelle_a
  WHERE calyear =
  ( SELECT MAX( calyear ) FROM Tabelle_a )
  GROUP BY
  calyear.

.
  SELECT DISTINCT
     
  *

  INTO CORRESPONDING FIELDS OF TABLE lt_tmp
  FROM Tabelle_a
  FOR ALL ENTRIES IN LT_ZEIT
  WHERE calyear = LT_ZEIT-calyear
  AND Berechnungslauf = LT_ZEIT-Berechnungslauf.


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


Re: subquery oder andere Lösung

Beitrag von JHM (Top Expert / 1188 / 1 / 195 ) »
meistercoach hat geschrieben:Muss ich mir das Ergebnis in eine interne Tabelle schreiben und dann über for all entries erenut die Tabelle abfragen?
Man kann SubSelects auch schachteln:

Code: Alles auswählen.

SELECT *
  INTO itab
  FROM tabelle_a
  WHERE calyear = ( SELECT MAX( calyear ) FROM tabelle_a ) 
    AND berechnungslauf = ( SELECT MAX( berechungslauf ) 
                                  FROM tabelle_a 
                                  WHERE calyear = ( SELECT MAX( calyear ) 
                                                    FROM tabelle_a ) ).
Für die Ermittlung des MAX( berechnungslauf) benötigst du das MAX( calyear ). Dieses kannst du per SubSelect im SubSelect ermitteln.

Folgende Benutzer bedankten sich beim Autor JHM für den Beitrag:
meistercoach

Gruß Hendrik

Seite 1 von 1

Vergleichbare Themen

3
Antw.
2245
Views
Subquery mit Name?
von Bajdu » 14.08.2006 09:54 • Verfasst in ABAP® für Anfänger
13
Antw.
3672
Views
Subquery gesucht
von Thomas R. » 10.12.2015 09:49 • Verfasst in ABAP® Core
9
Antw.
4117
Views
Frage zu Subquery
von Spookykid » 06.07.2011 11:22 • Verfasst in ABAP® für Anfänger
2
Antw.
1159
Views
Subquery in dynamischer Where-Bedingung
von Stefan7777 » 22.11.2005 10:36 • Verfasst in ABAP® Core
1
Antw.
486
Views
Datenbank Delete mit Subquery
von JohnLocklay » 28.05.2019 14:47 • 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

Zwischensumme Adobe Forms
vor 2 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

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

Zwischensumme Adobe Forms
vor 2 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 2 Tagen von Lucyalison 1 / 64
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 107
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 140