2017-09-15 4 views
1

Es scheint, dass als Ergebnis das Programm alle Kundenaufträge (von VBAK Tabelle) nur mit AUART = 'YI01' bekommt, und tatsächlich bekomme ich 1.699.698 Kundenaufträge. Es ignoriert also die anderen Parameter in Select VTWEG = 'Z1', SPART = 'Z1', KUNNR = '0230001039', ERDAT = GT '01.09.2017' für die ich nur 77 Ergebnisse erhalten sollte.Falsche Ergebnisse von SELECT mit OR-Bedingung

TYPES: BEGIN OF lw_odv_vbak, 
     vbeln TYPE vbak-vbeln, 
     vkorg TYPE vbak-vkorg, 
     vtweg TYPE vbak-vtweg, 
     spart TYPE vbak-spart, 
     netwr TYPE vbak-netwr, 
     kunnr TYPE vbak-kunnr, 
     erdat type vbak-erdat, 
     END OF lw_odv_vbak. 


DATA: it_odv_vbak TYPE STANDARD TABLE OF lw_odv_vbak INITIAL SIZE 0. 



SELECT vbeln 
    FROM vbak 
     INTO TABLE it_odv_vbak 
     WHERE vkorg = 'Z326' 
     AND vtweg = 'Z1' 
     AND spart = 'Z1' 
     AND kunnr = '0230001039' 
     AND auart = 'YC01' OR 
      auart = 'YI01' 
     AND erdat GT '01.09.2017'. 

Vielen Dank für Ihre Hilfe

+0

Wenn Sie ein Programmierer sein möchten, ist es eine gute Idee, zuerst die Logik kennenzulernen. – Jagger

+0

Hallo, danke für Ihre Hilfe, leider bekomme ich immer noch falsche Ergebnisse. Was ich will, ist zu tun mit den folgenden Parametern aus VBAK Tabelle zu extrahieren: VKORG 'Z326' = VTWEG = 'Z1' SPART = 'Z1' KUNNR = '0230001039' AUART = 'YC01' OR AUART = 'YI01' Erdat GT '20170901' – hammerman

Antwort

2

AND hat eine höhere Priorität als OR, so dass Sie die Auswahl wirksam für

(vkorg = 'Z326' AND vtweg = 'Z1' AND spart = 'Z1' AND kund = '0230001039' AND auart = 'YC01') 
    OR 
(auart = 'YI01' AND erdet GT '01.09.2017') 

die meisten ist sicherlich nicht das, was Sie zu tun gedachten. Verwenden Sie Klammern um Ihre OR-Klausel.

1

Verwenden Sie Klammern um die OR

SELECT vbeln 
    FROM vbak 
     INTO TABLE it_odv_vbak 
     WHERE vkorg = 'Z326' 
     AND vtweg = 'Z1' 
     AND spart = 'Z1' 
     AND kunnr = '0230001039' 
     AND (auart = 'YC01' OR 
      auart = 'YI01') 
     AND erdat GT '01.09.2017'. 
3

Sie zwei Dinge tun: 1) Verwenden Sie Klammern um OR 2) ändern Datumsformat '20170901'. In db werden Datumsangaben wie YYYYMMDD gespeichert.

SELECT vbeln 
FROM vbak 
    INTO TABLE it_odv_vbak 
    WHERE vkorg = 'Z326' 
    AND vtweg = 'Z1' 
    AND spart = 'Z1' 
    AND kunnr = '0230001039' 
    AND (auart = 'YC01' OR auart = 'YI01') 
    AND erdat GT '20170901'.