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[].
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 )
...
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 )
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 )
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.Thomas R. hat geschrieben: also bei meinem Test funktioniert es nicht - oder ich habe nicht verstanden wie Du es meinst.
Gegenfrage: Was ist kompakter?Unit605 hat geschrieben:Widerspricht sich das nicht mit:
???ralf.wenzel hat geschrieben: Ich kann kompakteres Coding deutlich besser lesen.
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 ).
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 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.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 meine, dass es so funktioniert: .... from drap as drap....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 habenund es auf der linken ja um die gleiche Tabelle geht käme dann ja etwas wie dies herausCode: 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 )
Diese Zeile liefert in meinem Test das falsche Ergebnis.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 )
Wie sollte die Zeile Deiner Meinung nach aussehen?
MfG
Thomas R.
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 )
YMMD - ABAP hat schon manchmal echte Stilblüten auf Lager...Unit605 hat geschrieben:Ich meine, dass es so funktioniert: .... from drap as drap....
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.