SAP Jobsuche bei DV-Treff
dimes
  • dimes
  • SAP Forum - Neuling Thema Starter
vor 17 Jahre

Hallo ich versuch grad einen Großen Joint select in verschiedene kleine Selects umzuschreiben, aber
irgendwie komme ich bei meinem Beispiel auf ein anderes ergebnis als beim original.

 

* original
SELECT kb~menge ku~kulab bk~bwart INTO TABLE beleg
   FROM ( ( mseg AS kb INNER JOIN mseg AS bk
                               ON bk~kunnr = kb~kunnr AND bk~matnr = kb~matnr )
                                     INNER JOIN mkpf AS mk
                               ON mk~mblnr = bk~mblnr )
                                     INNER JOIN msku AS ku
                               ON ku~kunnr = kb~kunnr AND ku~matnr = kb~matnr
WHERE kb~mblnr = wa-mblnr
     AND ( bk~bwart = '201' OR bk~bwart = '202' )
     AND cpudt = sdatum.


* meine
SELECT mblnr matnr kunnr menge
     INTO TABLE mseg_tab
   FROM mseg
 WHERE mblnr = wa-mblnr.

   
    LOOP AT mseg_tab.
        beleg-menge = mseg_tab-menge.
    
        SELECT seg~bwart seg~matnr seg~kunnr
             INTO (beleg-bwart, tmp_matnr, tmp_kunnr)
           FROM mseg AS seg INNER JOIN mkpf AS kpf
                               ON kpf~mblnr = seg~mblnr
         WHERE seg~bwart IN ('201', '202')
               AND seg~matnr = mseg_tab-matnr
               AND seg~kunnr = mseg_tab-kunnr
               AND kpf~cpudt = sdatum.

    SELECT kulab
         INTO beleg-kulab
       FROM msku
     WHERE kunnr = tmp_kunnr
           AND matnr = tmp_matnr.

    APPEND beleg.
    CLEAR: beleg-kulab.

    ENDSELECT.

 CLEAR: tmp_kunnr, tmp_matnr, beleg-bwart.
 ENDSELECT.
ENDLOOP.

Hat jemand ne idee warum ich auf verschiede Ergebnisse komme.

Danke und Gruß
dimes

 

Förderer

f.kemmer
vor 17 Jahre

Also ich hab jetzt leider nicht die Zeit mich durch den ganzen Join durchzudenken, aber auf anhieb fiel mir folgendes ins auge:

Bei deinem Join machst du folgendes: mseg AS kb INNER JOIN mseg AS bk
Entweder handelt es sich hier um eine Vorgehensweise die mir bisher noch unbekannt ist oder du joinst hier eine Tabelle mit sich selber. Wenn das dann zu Problemen führen sollte, würde ich mich nicht sehr wundern.

Sorry wenn ichs einfach nur nicht gecheckt hab.

Taner
vor 17 Jahre
Hallo zusammen,

ich sehe das Problem nicht darin, dass die MSEG mit sich selbst gejoined wird. Es gibt durchaus Fälle (z.B. eine Hierarchie), in denen diese Vorgehensweise sinnvoll ist.
Ich sehe hingegen das Problem darin, dass der Join über Nicht-Schlüsselfelder durchgeführt wird. Dies hat folgende Konsequenzen: Während im großen Join die Datensätze, in denen es keine Kunden- oder Materialnummer gibt, im Inner Join verschwinden, wird in der Variante mit den Selects für alle Einträge der MSEG ein LOOP durchlaufen. Das ist meiner Meinung nach falsch.

Ich rate Dir daher dazu, die interne Tabelle mseg_tab nicht mit der MSEG, sondern mit dem Join MSEG mit MSEG zu füllen. Dafür kannst Du den Join MSEG mit der MKPF als einfache Select-Anweisung ausführen.
Aus Effizienzgründen kannst Du das Feld MJAHR aus der Tabele MSEG beim Join mit der Tabelle MKPF vergleichen. Damit hast Du bei der MKPF den vollen Schlüssel, was immer schneller ist als ein halber.

Viel Spaß. Wenn es Schwierigkeiten gibt, dann schreib mir.

Schöne Grüße

Taner

Schöne Grüße

Taner


Beratung in SAP IS-U und IS-Waste

ABAP-Entwicklung