OpenSQL со сравнением между столбцами - PullRequest
0 голосов
/ 09 сентября 2018

Могу ли я сравнить столбцы таблицы в OpenSQL?

В настоящее время код выглядит так:

  SELECT SINGLE menge wemng ebeln ebelp
    INTO (eket-menge,
          eket-wemng,
          eket-ebeln,
          eket-ebelp)
    FROM eket
    WHERE ebeln = ekpo-ebeln
      AND ebelp = ekpo-ebelp.

  IF eket-menge NE eket-wemng.

Я хочу избежать получения строк, где menge = wemng, но это не работает:

  SELECT menge wemng ebeln ebelp
    INTO (eket-menge,
          eket-wemng,
          eket-ebeln,
          eket-ebelp)
    FROM eket
    WHERE ebeln = ekpo-ebeln
      AND ebelp = ekpo-ebelp
      AND menge <> wemng.

ABAP считает, что wemng должна быть переменной.

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Вы должны использовать селектор столбцов (~) при сравнении двух столбцов в состоянии ГДЕ.Это по замыслу.

ABAPDOCU говорит:

Селектор столбца

Символ ~.Столбец (столбец) таблицы базы данных (dbtab) может быть указан в операторе SELECT с помощью dbtab ~ col.Этот тип адресации необходим при обращении к нескольким таблицам базы данных, если имя столбца встречается в ряде разных таблиц базы данных, или , если два столбца сравниваются друг с другом при сравнении в WHEREусловие .

Итак, в вашем случае:

SELECT menge wemng ebeln ebelp
    INTO (eket-menge,
          eket-wemng,
          eket-ebeln,
          eket-ebelp)
    FROM eket
    WHERE ebeln = ekpo-ebeln
      AND ebelp = ekpo-ebelp
      AND menge <> eket~wemng.
...
0 голосов
/ 09 сентября 2018

Пожалуйста, проверьте ниже запрос:

  SELECT menge wemng ebeln ebelp
  INTO (eket-menge,
        eket-wemng,
        eket-ebeln,
        eket-ebelp)
  FROM eket
  WHERE ebeln = ekpo-ebeln
    AND ebelp = ekpo-ebelp
    AND menge <> eket~wemng.

Но в этот момент вы получаете ошибку:

Неправильное вложение: перед оператором «ENDIF» структура управления, введенная «SELECT», должна быть заключена в «ENDSELECT».

Так что вам нужно создать внутреннюю таблицу для обработки

  SELECT menge wemng ebeln ebelp
  INTO TABLE lt_eket
  FROM eket
  WHERE ebeln = ekpo-ebeln
    AND ebelp = ekpo-ebelp
    AND menge <> eket~wemng.

или используйте SELECT SINGLE

  SELECT SINGLE menge wemng ebeln ebelp
  INTO (eket-menge,
        eket-wemng,
        eket-ebeln,
        eket-ebelp)
  FROM eket
  WHERE ebeln = ekpo-ebeln
    AND ebelp = ekpo-ebelp
    AND menge <> eket~wemng.
...