Оператор выбора SQL с полем, имеющим несколько значений
У меня есть несколько флажков на моем экране выбора. Каждый флажок соответствует значению, которое может принимать поле таблицы. Затем я должен запустить запрос на выборку, в котором конкретное поле таблицы может иметь все значения, соответствующий флажок которых установлен.
Предположим, у меня есть 5 флажков, соответствующих значениям a1-a5. Теперь, если установлены флажки 1, 3 и 4, тогда поле таблицы может иметь значения a1 или a3 или a4.
select * from table where field = a1 or field = a2 or field = a3.
Один из способов сделать это - создать 5 переменных, а затем сделать что-то вроде этого
if checkbox1 checked
then var1 = a1
else
var1 = '0' //something which would never occur in the field of the table
и так далее для всех флажков.
А потом
select * from table where field = var1 or field = var2 or field = var3 or field = var4 or field = var5.
Это становится трудным, если есть 15 флажков. Есть лучший способ сделать это?
3 ответа
Используйте для этого таблицу выбора опций / диапазона:
DATA field_range TYPE RANGE OF data_type_of_table_field.
IF p_check1 = abap_true.
field_range = VALUE #( BASE field_range ( sign = 'I' option = 'EQ' low = 'A1' ) ).
ENDIF.
IF p_check2 = abap_true.
field_range = VALUE #( BASE field_range ( sign = 'I' option = 'EQ' low = 'A2' ) ).
ENDIF.
" ...
SELECT whatever FROM wherever WHERE field IN field_range.
ВНИМАНИЕ: Пустая таблица диапазонов будет соответствовать чему-либо ("без ограничений") и извлекать все содержимое таблицы базы данных, поэтому вам обычно нужно проверять это отдельно.
Один из возможных способов: добавить проверенные значения во внутреннюю таблицу, а затем использовать FOR ALL ENTRIES в операторе select.
Попробуй вот так
select * from table where field IN (a1,a2,a3 ...)