具有多个值的字段的sql select语句

Pra*_*wat 2 abap opensql

我的选择屏幕上有几个复选框.每个复选框对应一个表的字段可以采用的值.然后,我必须触发一个选择查询,其中表的特定字段可以具有选中相应复选框的所有值.

假设我有5个对应于值a1-a5的复选框.现在,如果选中复选框1,3和4,则表的字段可以具有值a1或a3或a4.

select * from table where field = a1 or field = a2 or field = a3.
Run Code Online (Sandbox Code Playgroud)

一种方法是创建5个变量然后做这样的事情

if checkbox1 checked
  then var1 = a1
else
  var1 = '0'    //something which would never occur in the field of the table
Run Code Online (Sandbox Code Playgroud)

等所有复选框.

然后

select * from table where field = var1 or field = var2 or field = var3 or field = var4 or field = var5.
Run Code Online (Sandbox Code Playgroud)

如果有15个复选框,这就变得很困难.有一个更好的方法吗?

vwe*_*ert 6

为此使用select-option/range表:

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.
Run Code Online (Sandbox Code Playgroud)

注意:空范围表将匹配任何内容("无限制")并获取数据库表的全部内容,因此您通常需要单独检查.