Оператор выбора 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 ...)
Другие вопросы по тегам