sql select 字段具有多个值的语句
sql select statement with field having multiple values
我的 selection 屏幕上几乎没有复选框。每个复选框对应一个 table 字段可以取的值。然后我必须触发一个 select 查询,其中 table 的特定字段可以具有所有值,其对应的复选框是 selected.
假设我有 5 个复选框对应值 a1-a5。
现在,如果选中复选框 1、3 和 4,则 table 的字段可以具有值 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 个复选框,这将变得困难。
有更好的方法吗?
这样试试
select * from table where field IN (a1,a2,a3 ...)
为此使用 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.
注意: 空范围 table 将匹配任何内容 ("no restrictions") 并获取数据库 table 的全部内容,所以您通常需要单独检查。
一种可能的方法:将检查的值附加到内部 table,然后在 select 语句中使用 FOR ALL ENTRIES。
我的 selection 屏幕上几乎没有复选框。每个复选框对应一个 table 字段可以取的值。然后我必须触发一个 select 查询,其中 table 的特定字段可以具有所有值,其对应的复选框是 selected.
假设我有 5 个复选框对应值 a1-a5。 现在,如果选中复选框 1、3 和 4,则 table 的字段可以具有值 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 个复选框,这将变得困难。 有更好的方法吗?
这样试试
select * from table where field IN (a1,a2,a3 ...)
为此使用 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.
注意: 空范围 table 将匹配任何内容 ("no restrictions") 并获取数据库 table 的全部内容,所以您通常需要单独检查。
一种可能的方法:将检查的值附加到内部 table,然后在 select 语句中使用 FOR ALL ENTRIES。