Subquery gesucht

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

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
14 Beiträge • Seite 1 von 1
14 Beiträge Seite 1 von 1

Subquery gesucht

Beitrag von Thomas R. (Expert / 755 / 78 / 34 ) »
Hallo,

irgendwie bin ich gerade auf dem falschen Dampfer. Ich suche eine Selectabfrage (mit Subqueries), die mir aus der Tabelle DRAP alle Zeilen liefert, bei denen der Satz mit der höchsten STZAE einen bestimmten PRNAM hat.

Also etwas in der Art wie:

Code: Alles auswählen.

    SELECT DISTINCT dokar, doknr, dokvr, doktl
      FROM drap
      WHERE prnam EQ @iv_uname
        AND stzae EQ ( SELECT MAX( stzae ) FROM drap WHERE dokar EQ drap~dokar AND doknr EQ drap~doknr AND dokvr EQ drap~dokvr AND doktl EQ drap~doktl )
      INTO CORRESPONDING FIELDS of TABLE @lt_documents[].
Wie kann ich die Subquery auf den aktuell betrachteten Doku-Info-Satz des "Hauptselects" beschränken?

MfG
Thomas R.

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


Re: Subquery gesucht

Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
Tach.

Versuch mal, beim Subquery einen Tabellen-Alias anzugeben:

Code: Alles auswählen.

...
AND stzae EQ ( SELECT MAX( stzae ) FROM drap as d WHERE d~dokar EQ drap~dokar AND d~doknr EQ drap~doknr AND d~dokvr EQ drap~dokvr AND d~doktl EQ drap~doktl )
...
Grüße,
Haubi

Folgende Benutzer bedankten sich beim Autor Haubi für den Beitrag:
Thomas R.

Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Re: Subquery gesucht

Beitrag von Thomas R. (Expert / 755 / 78 / 34 ) »
Danke Haubi,
das war es :up:

MfG
Thomas R.

Re: Subquery gesucht

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Ist die beste Antwort - wenngleich ich noch eine habe ;)

Für die, die - wie ich - Tabellenaliase für ein Leseerschwernis halten, geht auch, einfach den Tabellennamen zu verwenden statt des Alias.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Subquery gesucht

Beitrag von Thomas R. (Expert / 755 / 78 / 34 ) »
Hallo Ralf,

also bei meinem Test funktioniert es nicht - oder ich habe nicht verstanden wie Du es meinst.

Da Haubi/ich bereits auf der rechten Seite den Tabellennamen haben

Code: Alles auswählen.

AND stzae EQ ( SELECT MAX( stzae ) FROM drap as d WHERE d~dokar EQ drap~dokar AND d~doknr EQ drap~doknr AND d~dokvr EQ drap~dokvr AND d~doktl EQ drap~doktl )
und es auf der linken ja um die gleiche Tabelle geht käme dann ja etwas wie dies heraus

Code: Alles auswählen.

AND stzae EQ ( SELECT MAX( stzae ) FROM drap WHERE drap~dokar EQ drap~dokar AND drap~doknr EQ drap~doknr AND drap~dokvr EQ drap~dokvr AND drap~doktl EQ drap~doktl )
Diese Zeile liefert in meinem Test das falsche Ergebnis.
Wie sollte die Zeile Deiner Meinung nach aussehen?


MfG
Thomas R.

Re: Subquery gesucht

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
Widerspricht sich das nicht mit:
ralf.wenzel hat geschrieben: Ich kann kompakteres Coding deutlich besser lesen.
???

Re: Subquery gesucht

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Thomas R. hat geschrieben: also bei meinem Test funktioniert es nicht - oder ich habe nicht verstanden wie Du es meinst.
Du hast recht - das klappt deshalb nicht, weil das zweimal auftauchende DRAP offensichtlich nicht eindeutig interpretiert wird (was mich wundert, beim Lesen interpretiert man es ja auch instinktiv richtig). Dann ist doch die einzig richtige Lösung die von Haubi.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Subquery gesucht

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Unit605 hat geschrieben:Widerspricht sich das nicht mit:
ralf.wenzel hat geschrieben: Ich kann kompakteres Coding deutlich besser lesen.
???
Gegenfrage: Was ist kompakter?

Variante 1:

Code: Alles auswählen.

SELECT c~carrname, p~connid, f~fldate 
INTO CORRESPONDING FIELDS OF TABLE @itab FROM ( ( scarr AS c 
INNER JOIN spfli AS p 
  ON  p~carrid   = c~carrid 
  AND p~cityfrom = @p_cityfr 
  AND p~cityto   = @p_cityto ) 
INNER JOIN sflight AS f 
  ON f~carrid = p~carrid 
  AND f~connid = p~connid ). 
Variante 2:

Code: Alles auswählen.

SELECT scarr~carrname, spfli~connid, sflight~fldate 
INTO CORRESPONDING FIELDS OF TABLE @itab FROM ( ( scar 
INNER JOIN spfli 
  ON spfli~carrid   = scarr~carrid 
  AND spfli~cityfrom = @p_cityfr 
  AND spfli~cityto   = @p_cityto ) 
INNER JOIN sflight 
  ON sflight~carrid = spfli~carrid 
  AND sflight~connid = spfli~connid ). 
Ich muss beim Lesen der Variante 1 immer überlegen "was war P jetzt noch gleich"? Ich nehme Aliase viel öfter in SELECTs (auch ohne JOIN), wenn die Tabellenbezeichnung nicht sprechend ist, sondern z. B. ein "HEADER"/"ITEM"-Verhältnis durch Aliase erst so richtig klar wird.

Aber das ist, wie so Vieles, ziemlich subjektiv.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Subquery gesucht

Beitrag von black_adept (Top Expert / 4087 / 126 / 940 ) »
@Ralf:
Warum die beiden Klammern hinter dem FROM?
Macht Klammerung bei JOINs irgendwelche Unterschiede? Ich habe einen Join immer synoym für den mathematischen Begriff "Vereinigungsmenge" oder "Kreuzprodukt" gesehen. Und das ist kommutativ, so dass Klammern unnötig wären.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Subquery gesucht

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
black_adept hat geschrieben:@Ralf:
Warum die beiden Klammern hinter dem FROM?
Macht Klammerung bei JOINs irgendwelche Unterschiede? Ich habe einen Join immer synoym für den mathematischen Begriff "Vereinigungsmenge" oder "Kreuzprodukt" gesehen. Und das ist kommutativ, so dass Klammern unnötig wären.
Ich hab den SELECT aus der SAP-Hilfe kopiert und angepasst, weil ich zu faul war, mir einen eigenen auszudenken ;) Es ging ja nur um den Unterschied und da ich selbst fast nie mit JOINs arbeite, ist mir auf die Schnelle nix eingefallen.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Subquery gesucht

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
Thomas R. hat geschrieben:Hallo Ralf,

also bei meinem Test funktioniert es nicht - oder ich habe nicht verstanden wie Du es meinst.

Da Haubi/ich bereits auf der rechten Seite den Tabellennamen haben

Code: Alles auswählen.

AND stzae EQ ( SELECT MAX( stzae ) FROM drap as d WHERE d~dokar EQ drap~dokar AND d~doknr EQ drap~doknr AND d~dokvr EQ drap~dokvr AND d~doktl EQ drap~doktl )
und es auf der linken ja um die gleiche Tabelle geht käme dann ja etwas wie dies heraus

Code: Alles auswählen.

AND stzae EQ ( SELECT MAX( stzae ) FROM drap WHERE drap~dokar EQ drap~dokar AND drap~doknr EQ drap~doknr AND drap~dokvr EQ drap~dokvr AND drap~doktl EQ drap~doktl )
Diese Zeile liefert in meinem Test das falsche Ergebnis.
Wie sollte die Zeile Deiner Meinung nach aussehen?


MfG
Thomas R.
Ich meine, dass es so funktioniert: .... from drap as drap....

Code: Alles auswählen.

AND stzae EQ ( SELECT MAX( stzae ) FROM drap as drap WHERE drap~dokar EQ drap~dokar AND drap~doknr EQ drap~doknr AND drap~dokvr EQ drap~dokvr AND drap~doktl EQ drap~doktl )
Warum einige beim JOIN staendig/soviele Klammern setzen, habe ich auch noch nicht verstanden, da nicht notwendig.

Re: Subquery gesucht

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Unit605 hat geschrieben:Ich meine, dass es so funktioniert: .... from drap as drap....
YMMD - ABAP hat schon manchmal echte Stilblüten auf Lager...
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Subquery gesucht

Beitrag von Thomas R. (Expert / 755 / 78 / 34 ) »
Hallo unit605,
ich habe es spaßeshalber getestet - es funktioniert nicht!
MfG
Thomas R.

Re: Subquery gesucht

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
Schade. Liegt wohl daran, dass es ein Subquery und kein JOIN ist.

Sehe aber auch in einen meiner Joins, dass ich den Alias nicht in der Where-Klausel benutze.

Dieser schon aeltere Join funktioniert:

Code: Alles auswählen.

 SELECT DISTINCT equi~equnr equi~matnr equi~sernr ehaua~post_code1 ehaua~post_code1
                  equi~zzebeln equi~zzebelp eh~einbdat ehaua~post_code1
                  ekko~waers ekpo~netwr   ##too_many_itab_fields
    INTO CORRESPONDING FIELDS OF TABLE gt_equizip
    FROM  equi
    INNER JOIN egerh   AS eh    ON eh~equnr = equi~equnr
    INNER JOIN jest    AS sinst ON sinst~objnr = equi~objnr
    INNER JOIN jest    AS uinst ON uinst~objnr = equi~objnr
    INNER JOIN m_ehaua AS ehaua ON ehaua~tplnr = eh~devloc
    INNER JOIN ekko    AS ekko  ON ekko~ebeln = equi~zzebeln
    INNER JOIN ekpo    AS ekpo  ON ekpo~ebeln = ekko~ebeln AND ekpo~ebelp = equi~zzebelp
        WHERE  equi~eqtyp   = p_eqtyp
         AND   equi~eqart   = p_eqart
         AND   eh~einbdat   IN s_date
         AND   eh~bis       EQ '99991231'
         AND   sinst~stat   = gv_systemstatus
         AND   sinst~inact  = abap_false
         AND   uinst~stat   = gv_userstatus
         AND   uinst~inact  = abap_false
         AND   zzebeln      IN s_ebeln.

Seite 1 von 1

Vergleichbare Themen

3
Antw.
2462
Views
Subquery mit Name?
von Bajdu » 14.08.2006 09:54 • Verfasst in ABAP® für Anfänger
9
Antw.
4503
Views
Frage zu Subquery
von Spookykid » 06.07.2011 11:22 • Verfasst in ABAP® für Anfänger
2
Antw.
1279
Views
Subquery in dynamischer Where-Bedingung
von Stefan7777 » 22.11.2005 10:36 • Verfasst in ABAP® Core
1
Antw.
589
Views
Datenbank Delete mit Subquery
von JohnLocklay » 28.05.2019 14:47 • Verfasst in ABAP® Core
5
Antw.
2643
Views
Einfacher Subquery wirft Fehlermeldung
von stefanb » 05.12.2012 17:48 • Verfasst in ABAP® für Anfänger

Ü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

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.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
Gestern von Bright4.5 1 / 511
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2146
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8742