2016-03-30 33 views
1

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

値a1〜a5に対応する5つのチェックボックスがあるとします。 チェックボックス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チェックボックスがある場合、これは困難になります。 これを行うより良い方法はありますか?

+2

INを試してください。 'フィールドIN(var1、var2、var3、....)'となります。あなたはまだINの中にリストを構築する必要がありますが、より簡単かもしれません。 – artm

答えて

4

使用select-option/range tableのように試してみてください。

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. 

注意:は、空の範囲テーブルは何も一致する( "制限なし")との全体の内容を取得しますあなたは通常これを個別にチェックする必要があります。

+1

新しい構文をうまく使います。 +1最近「BASE」キーワードが導入されましたか?私のシステムで構文エラーが発生します。 – Jagger

+0

@Jagger 'BASE field_range []'を試してください - それ以外の場合は、新しい構文で常にそこにいたと思います... – vwegert

+0

私は同僚で、レンジテーブルのエントリ(I/EQ)が一定量を超えています。ここの誰か他の人? – icbytes

0

は、このために、この

select * from table where field IN (a1,a2,a3 ...) 
0

1つの可能な方法:チェックされた値を内部テーブルに追加してから、SELECTステートメントでFOR ALL ENTRIESを使用します。

関連する問題