2016-03-22 16 views
2

Berater senden Sie mir dieses Codebeispiel, wie etwas, das er erwartet, zu bekommen.Verschachtelte SQL-Abfrage für ABAP-Programm

SELECT m1~vbeln_im m1~vbelp_im m1~mblnr smbln  
    INTO CORRESPONDING FIELDS OF TABLE lt_mseg 
    FROM mseg AS m1 
    INNER JOIN mseg AS m2 ON m1~mblnr = m2~smbln 
         AND m1~mjahr = m2~sjahr 
         AND m1~zeile = m2~smblp 
    FOR ALL ENTRIES IN lt_vbfa 
    WHERE 
     AND m2~bwart = '102' 
     AND 0 = (select SUM((CASE 
     when SHKZG = 'S' THEN 1 
     when SHKZG = 'H' THEN -1 
     else 0 
     END) *MENGE) MENGE 
     into lt_mseg-summ 
     from mseg 
     where 
     VBELN_IM = m1~vbeln_im 
     and VBELP_IM = m1~vbelp_im 
     ). 

Das Problem - ich habe nicht gesehen, wie das in der aktuellen Syntax funktionieren sollte. Ich denke darüber nach, internes select zu trennen und es als Bedingung zu verwenden, um es zu main ... aber gibt es einen richtigen Weg, diese verschachtelte Konstruktion zu schreiben? P.S. Wie ich es verstehe - wenn verschachtelte Anweisung = 0, dann wird Hauptabfrage ausgeführt, das Problem hier - Fall in verschachtelter Anweisung, ist es sogar in ABAP möglich? Und Logik diktiert, dass diese Prüfung außerhalb der SQL-Hauptabfrage verwendet werden könnte. Aber ich bin ziemlich Neuling zu ABAP, also lasse ich einen Raum für andere mögliche Erklärungen.

+1

Teilen (in Schritten): klar erklären, was ist Ihre Absicht + welches Problem haben Sie vor + was haben Sie bis getan. –

+0

Wie ich es verstehe - wenn verschachtelte Anweisung = 0, dann wird Hauptabfrage ausgeführt, das Problem hier - Fall in verschachtelter Anweisung, ist es sogar in ABAP möglich? Und Logik diktiert, dass diese Prüfung außerhalb der SQL-Hauptabfrage verwendet werden könnte. Aber ich bin ziemlich Neuling zu ABAP, also lasse ich einen Raum für andere mögliche Erklärungen. – AlexanderK

+1

Bearbeiten Sie Ihre Frage (fügen Sie diese Informationen Ihrem POST hinzu), damit andere helfen können! –

Antwort

2

Die Logik, die Sie erhielten, ist Teil von Native/Open SQL und hat einige Mängel, die Sie beachten müssen.

  1. Die Anweisung, die Sie anzeigen, muss zwischen EXEC SQL und ENDEXEC platziert werden.
  2. Die Logik ist plattformabhängig.
  3. gibt es keine Syntax zwischen dem EXEC und ENDEXEC
  4. die Ausführung dies umgeht die Datenbank Pufferungsprozess durchgeführte Prüfung, so dass ihre langsamen

Für mich mich eine bessere Art und Weise untersuchen würde, die Daten zu erfassen, die funktioniert besser außerhalb von open/native sql.

Wenn Sie mit dieser Art von Logik weitermachen möchten, sind unten ein paar Links, die hilfreich sein sollten. Es gibt eine Beispielauswahl, die eine geschachtelte Auswahl mit einer case-Anweisung verwendet. Example Logic

Verwandte Themen