SELECT带OR条件的错误结果

问题描述:

看起来结果是程序仅通过AUART ='YI01'获得所有销售订单(来自VBAK表),并且实际上我获得了1.699.698的销售订单。所以它忽略了其他参数VTWEG = 'Z1',SPART = 'Z1',KUNNR = '0230001039', ERDAT = GT '01.09.2017'为此,我只能得到77个结果。SELECT带OR条件的错误结果

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

非常感谢您的帮助

+0

如果你想成为一名程序员,最好先了解逻辑。 – Jagger

+0

大家好, 感谢您的帮助,不幸的是我仍然得到错误的结果。 我想要做的是从VBAK表下面的参数提取: vkorg = 'Z326' vtweg = 'Z1' SPART = 'Z1' KUNNR = '0230001039' auart = 'YC01' OR auart ='YI01' erdat GT'20170901' – hammerman

ANDOR更高的优先级,让你有效地选择用于

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

这肯定不是你打算做。在你的OR子句中使用括号。

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

你可以做两件事情使用括号: 1)使用括号周围或 2)更改日期格式为 '20170901'。在db中,日期存储为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'.