如何在 SELECT 中包含多个条件



我正在使用5个参数从DB表中获取详细信息(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 .

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

但是 2/3/4/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.

执行此操作时,选择屏幕将允许数据的多个值和范围。

如果需要像 parameter -命令这样的单个值,则必须为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.

备注:

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

免責聲明:

  • 我还没有可用的SAP系统,因此代码可能包含语法错误。 - 我明天会检查它。
我认为最简单的

方法是改用select-options。然后,可以在查询中将选择选项值与in表达式一起使用。
这样,当值为空时,它将自动被忽略(在查询中使用空参数时不会发生这种情况),因此您不必为每个可能的组合创建单独的WHERE表达式。举个例子:

tables: mara.
select-options number for mara-matnr matchcode object mat1 no-extension no intervals.
select-options type for mara-mtart matchcode object h_t134 no-extension no intervals.
select-options sector for mara-mbrsh matchcode object h_t137 no-extension no intervals.
select-options group for mara-matkl matchcode object h_t023 no-extension no intervals.
select-options unit for mara-meins matchcode object h_t006 no-extension no intervals.
select distinct mara~matnr makt~maktx marc~werks mard~lgort into table ta_materials
  from mara
  inner join makt on makt~matnr = mara~matnr
  inner join marc on marc~matnr = mara~matnr
  inner join mard on mard~matnr = mara~matnr
  where makt~spras = sy-langu and
        mara~matnr in number and
        mara~mtart in type and
        mara~mbrsh in sector and
        mara~matkl in group and
        mara~meins in unit
  order by mara~matnr.

no-extensionno intervals选项将使选择选项的行为类似于屏幕上的参数(或多或少)。

相关内容

  • 没有找到相关文章

最新更新