Ошибка компилятора Выберите Single Count в цикле SQL - PullRequest
0 голосов
/ 25 сентября 2019

Я создал таблицу, в которую были добавлены номер материала, текст материала и т. Д. (Selected_materials).Теперь я хотел создать цикл с этой таблицей, чтобы в таблице EKPO он подсчитывал, как часто упоминается номер материала, чтобы использовать его впоследствии.

Для приведенного ниже кода компилятор говорит, что WHERE <selected_material>-matnr недействительно, даже если WRITE: ... <selected_material>-matnr = ... допустимо.

  LOOP AT selected_materials ASSIGNING <selected_material>.

    DATA: lv_count TYPE i.

    SELECT SINGLE COUNT(*)
      From Ekpo 
      INTO lv_count 
      WHERE <selected_material>-matnr = Ekpo-matnr.

    WRITE: <selected_material>-maktx, <selected_material>-matnr, <selected_material>-meins, <selected_material>-msehl, <selected_material>-ekpo_count.
    NEW-LINE.

  ENDLOOP.

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

До ABAP 7.40 SP 05 операндом слева от оператора должно было быть имя столбца (см. József Szikszai answer).

Начиная с ABAP 7.40 SP 05, существует строгий режим", который позволяет более сложные функции SQL.Строгий режим в основном активируется с помощью символа @ перед именами переменных ABAP, например:

SELECT COUNT( * )
  FROM ekpo 
  WHERE @lv_matnr = ekpo~matnr
  INTO @lv_count .

Примечание: если имя столбца используется справа, «псевдоним таблицы»требуется (ekpo~matnr) и в строгом режиме предложение INTO должно располагаться в конце (протестировано с ABAP 7.52)

1 голос
/ 25 сентября 2019

Ваше WHERE условие неверно, оно должно быть таким:

SELECT COUNT( * )
  FROM ekpo 
  INTO lv_count 
  WHERE matnr EQ <selected_material>-matnr.

Обратите внимание, SINGLE также удалено, так как (я думаю) вопрос в том, сколько записейв EKPO для номера материала (SELECT COUNT( * ) ...) и нет, если есть хотя бы один (SELECT SINGLE COUNT( * ) ...)

Еще одна вещь: в WRITE, вы отображаете поле: -ekpo_count, однако в SELECT COUNT( * ) используется lv_count.

...