如何在SELECT中包含多个条件?

Dhi*_*vya 3 abap where-clause opensql sap-selection-screens

我正在使用 5 个参数从数据库表(mara, makt, marc, mard)中获取详细信息。

 PARAMETERS :number TYPE matnr MATCHCODE OBJECT MAT1 ,
             type TYPE MTART MATCHCODE OBJECT H_T134 ,
             sector TYPE MBRSH MATCHCODE OBJECT H_T137 ,
             group TYPE MATKL MATCHCODE OBJECT H_T023 ,
             unit TYPE MEINS MATCHCODE OBJECT H_T006 .
Run Code Online (Sandbox Code Playgroud)

首先,我尝试使用选择查询从MARA表中获取数据。为了检索特定记录,我必须使用WHERE条件。但我对条件部分感到困惑。我们可以使用INITIAL条件检查哪个参数具有值。

但是 2/3/4/5 参数有可能具有值。对于每种情况,我们都必须编写选择查询(如果是这样会导致性能问题),或者有什么方法可以在选择查询中使用动态条件部分?

knu*_*nut 5

您可以使用SELECT-OPTIONS

TABLES MARA.  

SELECT-OPTIONS:
  s_matnr FOR mara-matnr MATCHCODE OBJECT MAT1 ,
  s_mtart FOR mara-MTART MATCHCODE OBJECT H_T134 ,
  s_mbrsh FOR mara-MBRSH MATCHCODE OBJECT H_T137 ,
  s_matkl FOR mara-MATKL MATCHCODE OBJECT H_T023 ,
  s_meins FOR mara-MEINS MATCHCODE OBJECT H_T006 .

* [...]  

SELECT * FROM MARA where 
  matnr in s_matnr and
  mtart in s_mtart and
  mbrsh in s_mbrsh and
  matkl in s_matkl and
  meins in s_meins.
Run Code Online (Sandbox Code Playgroud)

当您这样做时,您的选择屏幕将允许数据的多个值和范围。

如果您需要像parameter-command这样的单个值,则必须为以下选项设置附加选项SELECT-OPTION

  • NO INTERVALS 只允许单个值
  • NO-EXTENSION 只允许一个值。
  • OBLIGATORY 如果不允许使用空值(据我了解您的问题,您的情况相反,因此您不需要它)。

所以你的选择是:

SELECT-OPTIONS:
  s_matnr FOR mara-matnr NO-EXTENSION NO INTERVALS,
  s_mtart FOR mara-MTART NO-EXTENSION NO INTERVALS,
  s_mbrsh FOR mara-MBRSH NO-EXTENSION NO INTERVALS,
  s_matkl FOR mara-MATKL NO-EXTENSION NO INTERVALS,
  s_meins FOR mara-MEINS NO-EXTENSION NO INTERVALS.
Run Code Online (Sandbox Code Playgroud)

评论:

  • MARA必须定义为 aTABLE如果您使用SELECT-OPTIONS
  • 你真的需要MATCHCODE OBJECT吗?通常使用FOR已经定义了正确的匹配码对象(通过数据元素/域)。

免责声明:

  • 我还没有可用的 SAP 系统,所以代码可能包含语法错误。- 我明天检查一下。