Неверные результаты SELECT с условием ИЛИ

Кажется, что в результате программа получает все заказы на продажу (из таблицы VBAK) только с AUART = 'YI01', и действительно я получаю 1.699.698 заказов на продажу. Таким образом, игнорируются другие параметры в select VTWEG = 'Z1', SPART = 'Z1', KUNNR = '0230001039', ERDAT = GT '01.09.2017', для которых я должен получить только 77 результатов.

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

Большое спасибо за твою помощь


person hammerman    schedule 15.09.2017    source источник
comment
Если вы хотите стать программистом, неплохо сначала изучить логику.   -  person Jagger    schedule 18.09.2017
comment
привет всем, спасибо за вашу помощь, к сожалению, я все еще получаю неправильные результаты. Что я хочу сделать, так это извлечь из таблицы VBAK следующие параметры: vkorg = 'Z326' vtweg = 'Z1' spart = 'Z1' kunnr = '0230001039' auart = 'YC01' ИЛИ ​​auart = 'YI01' erdat GT '20170901 '   -  person hammerman    schedule 18.09.2017


Ответы (3)


Вы можете сделать две вещи: 1) Использовать круглые скобки вокруг ИЛИ 2) Изменить формат даты на «20170901». В БД даты хранятся в формате ГГГГММДД.

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'.
person Oguz    schedule 16.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' )

что, безусловно, не то, что вы намеревались сделать. Используйте круглые скобки вокруг предложения ИЛИ.

person vwegert    schedule 15.09.2017

Используйте круглые скобки вокруг ИЛИ

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'.
person András    schedule 15.09.2017