Select und Arithemtische Problem

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
4 Beiträge • Seite 1 von 1
4 Beiträge Seite 1 von 1

Select und Arithemtische Problem

Beitrag von RaCDigger (ForumUser / 42 / 4 / 7 ) »
Hallo zusammen,

ich stehe momentan vor einem Rätsel, ein Select gibt in einer berechneten Spalte seltsame Werte zurück bzw. wenn beide Operanten gefüllt sind funktioniert es, wenn ein Operant 0.000 als Inhalt hat dann nicht.

Der Select sieht wie folgt aus:

Code: Alles auswählen.

  SELECT b~vkorg, c~werks, a~matnr, l~lfimg,
         v~omeng, ( l~lfimg + v~omeng ) AS posanz
         FROM mara AS a
    INNER JOIN mvke AS b
      ON  b~matnr = a~matnr

    INNER JOIN marc AS c
      ON  c~matnr = a~matnr

    INNER JOIN mbew AS d
      ON  d~matnr = a~matnr
     AND  d~bwkey = c~werks

    LEFT OUTER JOIN zcds_zstori_lips( lv_lfdat_ab = @s_lfdat-low, lv_lfdat_bis = @s_lfdat-high ) as l
       on l~matnr = a~matnr

    left OUTER JOIN zcds_zstori_vbbe( lv_werks = @p_werks, lv_mbdat_ab = @s_mbdat-low, lv_mbdat_bis = @s_mbdat-high ) as v
        on v~matnr = a~matnr

    WHERE a~matnr IN @s_matnr
      AND b~vkorg EQ @p_vkorg
      AND b~lvorm NE 'X'
      AND b~mtpos IN @lr_mtpos
      AND c~mmsta IN @s_mstav
      AND c~werks EQ @p_werks
      AND c~zzstori_skip NE 'X'
      AND d~bklas NOT BETWEEN '3000' AND '3999'

    ORDER BY b~vkorg, c~werks, a~matnr

    INTO TABLE @gt_itab_mat.
Das Ergebnis sieht dann wie folgt aus.
Ergebnis Select.jpg
Das ganze habe ich auch als kompletten CDS View gebaut, aber auch da kommt das identische Ergebnis raus.

Code: Alles auswählen.

@AbapCatalog.sqlViewName: 'ZCDS_A_ZSTORI'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'CDS View für ZSTORI Job'
define view Zcds_Zstori_SEL with parameters lv_vkorg : vkorg,
                                            lv_werks : werks_d,
                                            lv_datab : erdat,
                                            lv_datbis : erdat,
                                            lv_vbbe_datab : mbdat,
                                            lv_vbbe_datbis : mbdat
    as select from mara as a

    inner join mvke as b
    on b.matnr = a.matnr
    
    inner join marc as c
    on c.matnr = a.matnr

    inner join mbew as d
    on d.matnr = a.matnr
    and d.bwkey = c.werks

    left outer join Zcds_Zstori_Lips(lv_lfdat_ab:$parameters.lv_datab, lv_lfdat_bis:$parameters.lv_datbis) as l
       on l.matnr = a.matnr

  
    left outer join Zcds_Zstori_Vbbe(lv_werks:$parameters.lv_werks, 
                                     lv_mbdat_ab:$parameters.lv_vbbe_datab, 
                                     lv_mbdat_bis:$parameters.lv_vbbe_datbis) as vbbe
        on vbbe.matnr = a.matnr      


{

     b.vkorg,
     c.werks,
     a.matnr,
     l.lfimg,
     vbbe.omeng,
     ( l.lfimg + vbbe.omeng ) as posanz
     
}

    where b.vkorg = :lv_vkorg
      and b.lvorm <> 'X'
      and ( b.mtpos = '0001' or b.mtpos = '0002' or b.mtpos = 'NORM' or b.mtpos = 'ZKDE')
      and c.werks = :lv_werks
      and c.mmsta = '30'
      and c.zzstori_skip <> 'X'
      and d.bklas not between '3000' and '3999'
Hat jemand evtl. eine Idee wo hier mein Gedankenfehler ist ?

Viele Grüße
Sven

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Select und Arithemtische Problem

Beitrag von black_adept (Top Expert / 3943 / 105 / 886 ) »
Mein Tipp: Wenn in der zcds_zstori_vbbe~ bzw in v~ kein Eintrag drin ist wird durch den left outer join zwar eine Zeile in die Ausgabetabelle geschrieben mit initial gefüllten Feldern für die zcds_zstori_vbbe~Felder, aber die Berechnung l~lfimg + v~omeng ist nicht möglich, da v~omeng eben nicht 0 sondern einfach nicht existent ist.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
RaCDigger

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Select und Arithemtische Problem

Beitrag von RaCDigger (ForumUser / 42 / 4 / 7 ) »
Hallo Stefan,

danke für deine Antwort -> Dein Tipp trifft es wohl genau.
Ich habe mittlerweile auch versucht den Select zu erweitern.

Code: Alles auswählen.

...
 SELECT b~vkorg, c~werks, a~matnr,
         CASE
            WHEN l~lfimg IS NULL THEN 0
            ELSE l~lfimg
         END,
         CASE
            WHEN v~omeng IS NULL THEN 0
            ELSE v~omeng
         END,
         ( l~lfimg + v~omeng ) AS posanz
         FROM mara AS a
...
Aber es wird immer noch beim Berechnen durchgegriffen auf den NULL Wert. Der Case funktioniert als solches, ich habe testweise statt 0 eine 1 angegeben. Dann kommt zwar die 1 in der ITAB an, aber berechnen tut er immer noch nichts.
Irgendwie will ich mir aber doch noch einen Loop über die ITAB sparen.

Falls jemand noch eine Idee hätte ?

Re: Select und Arithemtische Problem

Beitrag von RaCDigger (ForumUser / 42 / 4 / 7 ) »
Hallo zusammen,

ich konnte das "Problem" lösen. Da in OpenSQL trotz CASE umsetzung (Bei NULL werde 0) die nachfolgende Berechnung immer noch auf die NULL Werte der Spalten durchgegriffen hat, habe ich die komplette Datenbeschaffungslogik in einer Core Data Service View (CDS) gepackt und auch dort per CASE die NULL Spalte mit 0 aufgefüllt.

Code: Alles auswählen.

...
define view Zcds_Zstori_SEL with parameters lv_vkorg : vkorg,
                                            lv_werks : werks_d,
                                            lv_datab : erdat,
                                            lv_datbis : erdat,
                                            lv_vbbe_datab : mbdat,
                                            lv_vbbe_datbis : mbdat
    as select from mara as a

    inner join mvke as b
    on b.matnr = a.matnr
    
    inner join marc as c
    on c.matnr = a.matnr

    inner join mbew as d
    on d.matnr = a.matnr
    and d.bwkey = c.werks

    left outer join Zcds_Zstori_Lips(lv_lfdat_ab:$parameters.lv_datab, lv_lfdat_bis:$parameters.lv_datbis) as l
       on l.matnr = a.matnr
  
    left outer join Zcds_Zstori_Vbbe(lv_werks:$parameters.lv_werks, 
                                     lv_mbdat_ab:$parameters.lv_vbbe_datab, 
                                     lv_mbdat_bis:$parameters.lv_vbbe_datbis) as vbbe
        on vbbe.matnr = a.matnr      
{
     b.vkorg,
     c.werks,
     a.matnr,
     case
        when l.lfimg is null then 0
        else l.lfimg
     end as lfimg,
     case
        when vbbe.omeng is null then 0
        else vbbe.omeng 
     end as omeng
 }

    where b.vkorg = :lv_vkorg
      and b.lvorm <> 'X'
      and ( b.mtpos = '0001' or b.mtpos = '0002' or b.mtpos = 'NORM' or b.mtpos = 'ZKDE')
      and c.werks = :lv_werks
      and c.mmsta = '30'
      and c.zzstori_skip <> 'X'
      and d.bklas not between '3000' and '3999'
Beim zugriff auf die CDS View aus ABAP heraus kann man nun die Berechnung ohne Probleme durchführen, da der View die aufbereiteten Werte übergibt.

Code: Alles auswählen.

  SELECT vkorg, werks, matnr, lfimg,
         omeng, ( lfimg + omeng ) AS posanz
         FROM zcds_a_zstori( lv_vkorg = @p_vkorg,
                               lv_werks = @p_werks,
                               lv_datab = @s_lfdat-low,
                               lv_datbis = @s_lfdat-high,
                               lv_vbbe_datab = @s_mbdat-low,
                               lv_vbbe_datbis = @s_mbdat-high )
                               INTO TABLE @gt_itab_mat
Für diese Lösung reicht leider OpenSQL alleine nicht aus, man braucht Core Data Services.

Wollte es nur gepostet haben falls jemand anderes auch soll ein Problem hat und nach einer Lösung sucht.

Viele Grüße
Sven

Seite 1 von 1

Vergleichbare Themen

3
Antw.
1584
Views
SELECT - Problem
von RiffRaff » 13.04.2006 08:38 • Verfasst in ABAP® Core
8
Antw.
1911
Views
Select Problem die x-te
von Thanatos82 » 21.09.2012 15:31 • Verfasst in ABAP® für Anfänger
7
Antw.
2428
Views
Problem mit select
von robin1at » 03.02.2006 11:56 • Verfasst in ABAP® für Anfänger
1
Antw.
969
Views
SELECT Problem
von frany*89* » 02.09.2011 05:01 • Verfasst in ABAP® für Anfänger
2
Antw.
1154
Views
Select Problem
von ostpower » 22.07.2011 15:25 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 4 Tagen von Lucyalison 1 / 71
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 111
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 141