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'.
非常感谢您的帮助
答
AND
比OR
更高的优先级,让你有效地选择用于
(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'.
如果你想成为一名程序员,最好先了解逻辑。 – Jagger
大家好, 感谢您的帮助,不幸的是我仍然得到错误的结果。 我想要做的是从VBAK表下面的参数提取: vkorg = 'Z326' vtweg = 'Z1' SPART = 'Z1' KUNNR = '0230001039' auart = 'YC01' OR auart ='YI01' erdat GT'20170901' – hammerman