SAP查询中的多个条件

时间:2012-05-15 09:34:25

标签: select sap where abap

我使用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 .

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

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

2 个答案:

答案 0 :(得分:4)

您可以使用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.

备注:

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

声明:

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

答案 1 :(得分:4)

我认为最简单的方法是使用select-options代替。然后,您可以在查询中使用带有in表达式的select-option值 这样,当值为空时,它将自动被忽略(当您在查询中使用空参数时不会发生这种情况),因此您不必为每个可能的值创建单独的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选项会使select-option在屏幕上的行为类似于参数(或多或少)。