Select 选择带有偏移量的语句?

Select 选择带有偏移量的语句?,select,abap,opensql,Select,Abap,Opensql,我试图在ABAP中使用此SELECT语句: SELECT DISTINCT * FROM dbtab INTO CORRESPONDING FIELDS OF TABLE itab WHERE field1+7(16) IN s_field1 AND field2 IN s_field2. 但我不能对dbtab列使用偏移量。 我怎样才能解决这个问题 我尽量避免像这样的循环 SELECT DISTINCT * FROM dbtab

我试图在ABAP中使用此SELECT语句:

  SELECT DISTINCT * FROM  dbtab
     INTO CORRESPONDING FIELDS OF TABLE itab
     WHERE  field1+7(16)  IN s_field1
     AND    field2        IN s_field2.
但我不能对dbtab列使用偏移量。 我怎样才能解决这个问题

我尽量避免像这样的循环

  SELECT DISTINCT * FROM  dbtab
     WHERE  field2        IN s_field2.
       IF field1+7(16)  IN s_field1
           ...
       endif.
  endselect.

不能在OPEN SQL中使用偏移量

我建议在一个内部表中做一个SELECT,并像这样循环它

SELECT DISTINCT * FROM dbtab
INTO CORRESPONDING FIELDS OF TABLE itab
WHERE field2 IN s_field2.

LOOP AT dbtab into wa_itab.
  IF wa_itab-field1+7(16) IN s_field1
    ...
  ENDIF.
ENDLOOP.
另一方面,我还将内部表定义为排序或散列,或者如果您更愿意尝试按正在进行比较的字段对itab进行排序。字段符号也可以是另一种选择


希望有帮助。

如果您的策略允许,您可以使用EXECUTE_SQL块,例如,如果您有一个Oracle后端,它允许您利用本机SQL构造,而不仅仅是打开SQL。这取决于性能增益,取决于判断这是否合理。我想可能不是

您还可以使用LIKE子句,该子句的效率不如精确地知道偏移量,但允许您使用%:
封装每个选项,其中字段1类似于“%search\u partial%”或字段1类似于…


这是什么用例,如果我们有一些上下文,可能会有一个更合适的选项。

您正在选择中使用范围/选择选项,因此您可以在范围字段中尝试包含模式(CP)条目(很抱歉,我没有实际可用的SAP系统来创建示例。当我有可用的系统时,我的答案将遵循-除非其他人回答:)你用
s_field1+7(16)
选择什么?一个值列表还是一个复杂的选择(大于,模式…)?我评论中的解决方案是(或多或少)对于范围和单个值来说很容易。模式等可能会变得更加困难。为了更好的性能,建议在循环中使用字段符号,而不是工作区域。@Suncatcher同意。祝您好运。