mehrere felder gleichzeitig auslesen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • mehrere felder gleichzeitig auslesen

    hallo.

    ich habe für die schule ein kleines anfängerprojekt zu erledigen.
    es geht zwar um eine programmierung innerhalb ABAP,
    aber mein problem bezieht sich auf sql:

    meine sql abfrage soll mir für jede zeile meiner tabelle
    den wert der NAME-spalte sowie den minimalen,
    den maximalen und den durchschnittlichen wert
    der spalte VALUE ermitteln und diese werte
    jeweils in eine variable schreiben, die anschließend
    ausgegeben werden soll.

    ich habe büchern und quellen im internet folgend
    diese abfrage geschrieben:

    PHP-Code:

    SELECT NAME
    MINVALUE ), MAXVALUE ), AVGVALUE 
    FROM Tabelle1
    INTO PufferName
    PufferMinPufferMaxPufferDurchschn 
    GROUP BY STOCK
    .

    writePufferStock.
    write25 PufferMin.
    write50 PufferMax.
    write75 PufferDurchschn.

    ENDSELECT
    beim ausführen wird aber diese fehlermedung generiert:
    "comma without preceding colon (after select?)"

    ich denke der code ist formal ok.
    aber anscheinen doch nicht!

    wenn ich nur ein einziges feld (z.b. NAME) auslesen,
    in nur eine einzige variable (z.b. PufferName) speichern
    und ausgeben lasse,
    dann würde es funktionieren.

    was mache ich falsch?
    wie gehts richtig?

  • #2
    In ABAP darfst du beim Selektieren mehrerer Spalten kein Komma verwenden.
    (Ausnahme: selektieren direkt in Variablen, die müssen dann abe rin Klammern)

    Das Komma ist in dieser Sprache sowas von reserviert, das kann man sich gar nicht vorstellen. Ein Komma wird benutzt um die Anweisung vor dem davor stehenden Doppelpunkt auf mehrere Sachen wirken zu lassen.
    Code:
    CLEAR result1.
    CLEAR result2.
    CLEAR result3.
    und
    Code:
    CLEAR: result1, result2, result3.
    bewirken das gleiche

    Deine Abfrage müsste so aussehen
    Code:
    SELECT NAME MIN( VALUE ) MAX( VALUE ) AVG( VALUE ) STOCK
    FROM Tabelle1
    INTO (PufferName, PufferMin, PufferMax, PufferDurchschn, STOCK)
    GROUP BY STOCK.
    Du musst wenn ich das Recht weiß, auch die Spalte stock selektieren, da du sonst danach nicht gruppieren kannst (Warum? Siehe unten im Teil openSQL)

    btw #1:
    SELECT - ENDSELECT ist verpönt, steht auch in der Doku
    Zumindest beim Debuggen wirst du dir fürchterlich in den A*sch beißen
    Besser:
    Code:
    * Datentypen sind anzupassen
    TYPES: 
      begin of ty_result,
        name char20,
        minimum int4,
        maximum int4,
        average float,
        stock int4,
      end of ty_result.
    
    DATA:
      lt_result TYPE TABLE OF ty_result,
      ls_result LIKE LINE OF  lt_result.
    
    SELECT NAME, MIN( VALUE ) aas minimum MAX( VALUE ) as maximum AVG( VALUE ) as average STOCK
    FROM Tabelle1
    INTO CORRESPONDING FIELDS OF TABLE lt_result
    GROUP BY STOCK.
    
    IF sy-subrc <> 0 OR lt_result IS INITIAL.
    * Sollte nicht vorkommen, wenn Daten vorhanden sind
      MESSAGE E001(znachrichtenklasse).
    ENDIF.
    
    * Ergebnis abarbeiten
    LOOP AT lt_result INTO ls_result.
      WRITE pufferstock.
      WRITE ls_result-minimum.
      WRITE ls_result-maximum.
      WRITE ls_result-average.
    ENDLOOP.
    btw #2:
    Eine Ausgabe ist schöner, wenn du das ALV-Grid bemühst, dann kann der Anweder wunderbar sortieren, Spaltenreihenfolge nändern, ...

    btw #3:
    Das hat nichts mi SQL zu tun, wie wir es hier meinen.
    Das was du (ganz richtig) verwendest, schimpft sich OpenSQL und ist ein SQL-Dialekt, den der ABAP-Kernel dann zur Laufzeit transparent in den SQL-Dialekt des zugrundeliegenden DBMS übersetzt (Microsoft, mySQL, Oracle, ...)
    Wenn hierbei beim Prüfden/Aktivieren was bemängelt wird, ist das eine Meldung des ABAP-Compilers.

    Ein tatsächliches SQL-Problem wäre es, wenn du mit dem Statement EXEC SQL arbeitest, aber des lässt sich nit prüfen, da gibt's höchstens einen unschönen Kurzdump, da ABAP das ungeprüft an die Datenbank weitergibt.

    btw #4: Enjoy SAP
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar

    Lädt...
    X