Можно ли использовать оператор IF в предложении WHERE и использовать оператор INTO в соответствии с разными значениями IF?

есть ли способ получить эти 2 SELECT как один SELECT, используя что-то вроде IF в предложении WHERE? И будет ли использование 1 выбора вместо 2 иметь какое-либо значение во время выполнения? Я использую OpenSQL на SAP-ABAP. Предоставление кода было бы очень полезно. ТЫ.

РЕДАКТИРОВАТЬ: я только что понял, что не очень ясно выразился, я также хочу получить данные В разных параметрах в соответствии с результатами оператора IF. Например, если y = a, то INTO lv_xa. если y = b, то В lv_xb.

SELECT SINGLE x
FROM table
WHERE y = a
INTO lv_xa.

SELECT SINGLE x
FROM table
WHERE y = b
INTO lv_xb.

person NTahaE    schedule 05.09.2019    source источник


Ответы (2)


Поскольку наибольшее время выполнения исходит из запроса SQL базы данных по сравнению с выполнением ABAP, вы можете использовать один SELECT с WHERE со всеми условиями и получить строки во внутреннюю таблицу, и вы возьмете нужную строку через ABAP табличное выражение (ниже: result[ y = a ]) .

DATA result TYPE SORTED TABLE OF table WITH NON-UNIQUE KEY y.

SELECT y x
  FROM table
  WHERE y IN (a,b)
  INTO TABLE result.

lv_xa = result[ y = a ]-x.
lv_xb = result[ y = b ]-x.

Обратите внимание, что табличное выражение может остановить выполнение вашей программы, если строка не найдена, поэтому я позволю вам прочитать документацию, указанную выше, чтобы найти лучший способ избежать этого.

person Sandra Rossi    schedule 05.09.2019
comment
Это вроде самое близкое. Я не ожидал, что это будет сделано только с помощью одного выбора, но человек может надеяться на это :) Ty за ваш ответ. - person NTahaE; 07.09.2019

Я думаю, вам нужен простой оператор CASE -

SELECT CASE WHEN y = a THEN x END, CASE WHEN y = b THEN x END
FROM table
WHERE y IN (a, b)
INTO lv_xa, lv_xb
person Ankit Bajpai    schedule 05.09.2019