2017-09-15 2 views
1

Il semblerait que le programme obtienne toutes les commandes client (à partir du tableau VBAK) uniquement avec AUART = 'YI01', et en effet j'obtiens 1.699.698 commandes client. Donc, il ignore les autres paramètres dans la sélection VTWEG = 'Z1', SPART = 'Z1', KUNNR = '0230001039', ERDAT = GT '01.09.2017' pour lequel je devrais obtenir seulement 77 résultats.Mauvais résultats de SELECT avec la condition OU

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'. 

Merci beaucoup pour votre aide

+0

Si vous voulez être programmeur, il est préférable de commencer par connaître la logique. – Jagger

+0

Salut à tous, merci pour votre aide, malheureusement, je reçois toujours des résultats erronés. Ce que je veux faire est d'extraire de la table VBAK avec les paramètres suivants: VKORG = 'Z326' vtweg = 'Z1' Spart = 'Z1' KUNNR = '0230001039' auart = 'YC01' OU auart = 'YI01' erdat GT '20170901' – hammerman

Répondre

2

AND a une priorité plus élevée que OR, donc vous choisissez efficacement

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

qui est certainement pas ce que vous aviez l'intention de le faire. Utilisez des parenthèses autour de votre clause OR.

1

Utilisez les parenthèses autour du ou de

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

Vous pouvez faire deux choses: 1) Utilisez des parenthèses autour OU 2) Changer le format de date '20170901'. En db, les dates sont stockées comme YYYYMMDD.

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'.