如何在SQL语句中处理空报表参数

2020-08-19 02:06发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我正在努力寻找一种更简单的方法来查找如何在ABAP中实现这种查询

选择*

来自下属雇员

其中employeeid = ISNULL(p_employeeid,employeeid)

和cityid = ISNULL(p_cityid,cityid)

p_employeeid和p_cityid都是用户输入的参数。

如果用户未向p_employeeid输入值,则该查询将返回所有员工记录,无论其ID是什么

如果用户未输入p_cityid的值,则该查询将返回所有员工记录,而不管城市是什么

我知道我可以编写用于处理每个条件的单个查询,但是,是否有更简单的方法来进行此操作?

我希望在此输入任何信息

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我正在努力寻找一种更简单的方法来查找如何在ABAP中实现这种查询

选择*

来自下属雇员

其中employeeid = ISNULL(p_employeeid,employeeid)

和cityid = ISNULL(p_cityid,cityid)

p_employeeid和p_cityid都是用户输入的参数。

如果用户未向p_employeeid输入值,则该查询将返回所有员工记录,无论其ID是什么

如果用户未输入p_cityid的值,则该查询将返回所有员工记录,而不管城市是什么

我知道我可以编写用于处理每个条件的单个查询,但是,是否有更简单的方法来进行此操作?

我希望在此输入任何信息

付费偷看设置
发送
3条回答
浮生未央
1楼-- · 2020-08-19 02:55

您可以在where子句中使用范围。 如果范围填充了您的输入,它将返回与您的输入相对应的数据,如果为空,则将仅带走数据库中的所有数据。

选择*
   从员工
  r_empid中的employeeid在哪里?
    AND r_cityid中的cityid []
 
Bunny_CDM
2楼-- · 2020-08-19 02:59

Arvin Ramos ,请继续回答您的公开问题。

  • 评论答案或您的问题是否还有未解决的问题。
  • 否则将答案标记为接受,如果它可以帮助您解决问题
  • 或发布您自己的答案并接受 如果您自己找到了另一个有用的解决方案
  • ,或者将您的问题重定向到另一个相关且对解决您的问题有用的问题
  • 最后,请关闭您的问题
吹牛啤
3楼-- · 2020-08-19 02:40

RANGE数据类型非常适合您的情况,就像已经提到的Teshan一样。

如果WHERE子句中的SELECT语句中使用了RANGE数据类型 ,有一些规则需要注意:其中之一是,如果范围表为空,则不评估此特定的where-restriction。

有几种方法可以声明RANGE数据类型。

示例1:

这向您展示了如何将其作为选择屏幕参数进行操作。 如果只允许单个值,则可以添加选项"无扩展无间隔":

 TABLES zemployees。
 选择选项r_empid用于zemployees-employeeid。  ""没有扩展,没有间隔。
 选择选项r_cityid用于zemployees-cityid。  ""没有扩展,没有间隔。

 选择 *
   从员工
  r_empid中的employeeid在哪里?
    AND cityid in r_cityid [] 

示例2:

如果您有较新的SAP ABAP堆栈,并且不想更改选择屏幕上的任何内容,那么以下内容将为您工作:/p>

数据r_empid类似于p_employeeid的范围。
 数据r_cityid类似于p_cityid的范围。

 如果p_employeeid不是INITIAL。
   r_empid [] =值#((符号='I'选项='EQ'低= p_employeeid))。
 万一。
 如果p_cityid不是INITIAL。
   r_cityid [] =值#((符号='I'选项='EQ'低= p_cityid))。
 万一。

 选择 *
   从员工
  r_empid中的employeeid在哪里?
    AND cityid in r_cityid [] 

示例3:

对于较早的版本,您将不得不使用以下版本:

 DATA r_empid类似于p_employeeid的范围。
 数据w_empid与r_empid类似。
 数据r_cityid类似于p_cityid的范围。
 数据w_cityid,类似于r_cityid的行。
 如果p_employeeid不是INITIAL。
   w_empid-sign ='I'。
   w_empid-option ='EQ'。
   w_empid-low = p_employeeid。
   追加w_empid到r_empid。
 万一。
 如果p_cityid不是INITIAL。
   w_cityid-sign ='I'。
   w_cityid-option ='EQ'。
   w_cityid-low = p_cityid。
   将w_cityid附加到r_cityid。
 万一。

 选择 *
   从员工
  r_empid中的employeeid在哪里?
    AND cityid in r_cityid [] 

让我知道这是否对您有用,或者您是否需要进一步的帮助。

一周热门 更多>