SAP Jobsuche bei DV-Treff
TimSchu
  • TimSchu
  • SAP Forum - Neuling Thema Starter
vor 3 Jahre
Hallo zusammen,

ich habe eine Herausforderung mit einer OpenSQL-Abfrage.

Hier eine vereinfachte Darstellung meines Problems. Ich habe folgende Tabelle:

ROW1 ROW2

1 4

0 2

Ich will nun von beiden Spalten den Durchschnitt bilden, allerdings keine 0-Werte berücksichtigen. Das heißt ich erwarte für den Average von ROW1 = 1 und für den Average von ROW2 3.

Wenn ich die WHERE-Bedingung ROW1 <> 0 einbauen würde, erhielte ich für den Durschnitt von ROW2 ein fehlerhaftes Ergebnis.

Mit etwas ABAP-Coding würde ich das Problem gelöst bekommen, allerdings müsste ich aufgrund der Komplexität das halbe Programm umschreiben. Im Idealfall gibt es dafür einen OpenSQL-Befehl.

Ich bewege mich in einem 7,4er(SP13) R/3-System.

Viele Grüße

TimSchu

wreichelt
vor 3 Jahre
Hallo,

über die Funktion

AVG(): Mittelwert aller Zellwerte, NULL-Werte werden ignoriert.

Gruß Wolfgang

TimSchu
  • TimSchu
  • SAP Forum - Neuling Thema Starter
vor 3 Jahre
Zitat von: wreichelt 

Hallo,

über die Funktion

AVG(): Mittelwert aller Zellwerte, NULL-Werte werden ignoriert.

Gruß Wolfgang

Hallo Wolfgang,

genau mit diesem Befehl selektiere ich die Daten meiner Tabelle. Der Wert ist nicht NULL sondern 0,00 wenn man es genau nimmmt.

Ich habe mit folgendem SELECT-Befehl auf meine Tabelle zugegriffen, wo ich 3 Einträge habe. Die Werte in ROW1 betragen 1,000 0,000 und 0,000. Als Ergebnis erhalte ich 0,333

SELECT AVG( row1 ),
       AVG( row2 )
    FROM ztable
    INTO TABLE @DATA(lt_data)

Viele Grüße

TimSchu

wreichelt
vor 3 Jahre
Hallo,

vielleicht mit dem Parameter:

AVG( num1 AS DEC( 10,0 ) ) AS avg_dec0,

Gruß Wolfgang

TimSchu
  • TimSchu
  • SAP Forum - Neuling Thema Starter
vor 3 Jahre
Lösung/ Workaround:

Ich habe die Anforderung innerhalb eines SELECT-Befehls nicht umsetzen können. Ich habe meinen Ursprünglichen Befehl nicht geändert. Danach durchlaufe ich meine Ausgabetabelle und selektiere meine ROW1-Spalte erneut, mit der WHERE-Bedingung ROW1 > 0. Danach aktualisiere ich den Wert in meiner internen Tabelle.

Funktioniert einwandfrei, allerdings nehme ich nun die doppelte Laufzeit in Kauf.

KevinHoltkamp
vor 3 Jahre
Moin,

du könntest ein WHERE ROW1 NE 0 einbauen