2

我的选择屏幕上的复选框很少。每个复选框对应一个表的字段可以取的值。然后我必须触发一个选择查询,其中表的特定字段可以具有所有值,其对应的复选框被选中。

假设我有 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 个复选框,这将变得很困难。有一个更好的方法吗?

4

3 回答 3

6

为此使用选择选项/范围表

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.

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

于 2016-03-30T06:46:21.297 回答
0

一种可能的方法:将检查值附加到内部表,然后在 select 语句中使用 FOR ALL ENTRIES。

于 2016-04-07T10:05:24.880 回答
0

像这样试试

select * from table where field IN (a1,a2,a3 ...)
于 2016-03-30T06:22:08.290 回答