Консультант прислал мне этот пример кода, вот что он ожидает получить
SELECT m1~vbeln_im m1~vbelp_im m1~mblnr smbln
INTO CORRESPONDING FIELDS OF TABLE lt_mseg
FROM mseg AS m1
INNER JOIN mseg AS m2 ON m1~mblnr = m2~smbln
AND m1~mjahr = m2~sjahr
AND m1~zeile = m2~smblp
FOR ALL ENTRIES IN lt_vbfa
WHERE
AND m2~bwart = '102'
AND 0 = ( select SUM( ( CASE
when SHKZG = 'S' THEN 1
when SHKZG = 'H' THEN -1
else 0
END ) *MENGE ) MENGE
into lt_mseg-summ
from mseg
where
VBELN_IM = m1~vbeln_im
and VBELP_IM = m1~vbelp_im
).
Проблема в том, что я не понимаю, как это должно работать в текущем синтаксисе. Я думаю о том, чтобы получить внутренний выбор и использовать его как условие для основного, но есть ли правильный способ написать эту вложенную конструкцию?
Насколько я понимаю, если вложенный оператор = 0, то выполняется основной запрос. Проблема здесь в случае внутри вложенного оператора. Возможно ли это вообще в ABAP? И, на мой взгляд, эту проверку можно было бы использовать вне основного SQL-запроса.
Любые предложения приветствуются.
FOR ALL ENTRIES
. Он используется для выбора из таблицы БД на основе зависимой itab, которой в вашем случае нет. Я не вижу зависимости между вашимиlt_vbfa
иmseg
таблицами. Вы должны четко сформулировать свою задачу. - person Suncatcher   schedule 22.03.2016