2

選択画面にいくつかのチェックボックスがあります。各チェックボックスは、テーブルのフィールドが取り得る値に対応しています。次に、テーブルの特定のフィールドが、対応するチェックボックスが選択されているすべての値を持つことができる選択クエリを起動する必要があります。

値a1-a5に対応する5つのチェックボックスがあるとします。チェックボックス 1、3、および 4 がチェックされている場合、テーブルのフィールドは値 a1 または a3 または a4 を持つことができます。

select * from table where field = a1 or field = a2 or field = a3.

これを行う1つの方法は、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 * from table where field IN (a1,a2,a3 ...)
于 2016-03-30T06:22:08.290 に答える