赛跑网

 找回密码
 注册
查看: 3584|回复: 10

[ABAP问题] 关于选择屏幕抽取数据的的条件以及选择屏幕字段与条件的关联,求助!

[复制链接]
发表于 2013-6-24 23:26:29 | 显示全部楼层 |阅读模式
15赛跑币
本帖最后由 ronnieshuai 于 2013-6-25 11:16 编辑

如图:

图示

图示


怎么样取条件才符合的屏幕筛选逻辑?
即:程序中抽取数据的WHERE条件应该怎么关联?
如下是我写的关联,但是这样写就会出一个问题:如果我必选项改为不必选时,然后空着不输入 值,这时我的SELECT是没有办法取到数据库表中的数据的,因为WHERE 里的条件是 '1' = '2','2'中的值赋给屏幕字段去查数据库表中的数据,如果没有等于这个条件不成立,所以一笔也没有抽取出来,现在我要问的就是这个,怎么样才能关联上他们关取上数据,当屏幕字段值不为空时,抽取符合屏幕字段要求的,当屏幕字段为空时,抽取所有的数据?

SELECT
      mseg~ebeln
      mseg~ebelp
      mseg~matnr
      makt~maktx
      mseg~lgort
      ekpo~menge
      ekpo~meins
      mseg~mblnr
      ekbe~budat
      mseg~bpmng
      mseg~menge
      mseg~meins
      mseg~shkzg
      ekko~bsart
      makt~spras
      mseg~bukrs
      mseg~mjahr
  FROM mseg
  INNER JOIN makt ON mseg~matnr = makt~matnr
  INNER JOIN ekbe ON mseg~mblnr = ekbe~belnr
                 AND mseg~mjahr = ekbe~gjahr
                 AND mseg~zeile = ekbe~buzei
                 AND mseg~matnr = ekbe~matnr
  INNER JOIN ekpo ON ekbe~ebeln = ekpo~ebeln
                 AND ekbe~ebelp = ekpo~ebelp
INNER JOIN ekko ON ekpo~ebeln = ekko~ebeln
INTO  TABLE gt_tab1 UP TO p_num ROWS
  WHERE mseg~bukrs = bukrs
    AND mseg~mjahr = mjahr
    AND mseg~werks = werks

    AND  mseg~matnr IN matnr
    AND ekbe~budat IN budat
    AND ekko~bsart = 'NB'
    AND ekpo~loekz = ''.


最佳答案

查看完整内容

可以在在SELECT语句前加判断。事先判断条件字段是否为空,为空的话,把选择语句的条件去掉。 如: IF A SPACE. SELECT ... WHERE B = A .... ELSEIF A = SPACE. SELECT ... WHERE ... ENDIF.




上一篇:参考交易,参照
下一篇:外币评估的问题
本楼点评(0) 收起
发表于 2013-6-24 23:26:30 | 显示全部楼层
可以在在SELECT语句前加判断。事先判断条件字段是否为空,为空的话,把选择语句的条件去掉。
如:
IF A <> SPACE.
   SELECT ... WHERE B = A ....
ELSEIF A = SPACE.
   SELECT ... WHERE ...
ENDIF.
本楼点评(0) 收起
回复

使用道具 举报

发表于 2013-6-25 20:38:45 | 显示全部楼层
根据编程经验,if else语句你该看一看,不是一条select就能解决条件判断的
本楼点评(0) 收起
回复

使用道具 举报

 楼主| 发表于 2013-6-25 21:53:28 | 显示全部楼层
kasa 发表于 2013-6-25 20:38
根据编程经验,if else语句你该看一看,不是一条select就能解决条件判断的

不不不,我说的不是这个条件问题,我说的是正常PARAMETERS声明的选择屏幕使用的条件是WHERE 'A' = 'B',SELECTION OPTIONS 声明的选择屏幕是WHERE 'A' IN ‘B';

如果选择屏幕只有一个字段时,而且用PARAMATERS声明的选择屏幕在SELECT抽取数据时条件是用'A' = 'B'.'B’是选择屏幕字段,'A’是抽取数据库表中与'B'关联的字段,问题就在这里了,只有一个字段选择屏幕时我在SELECT抽取数据时无论选择屏幕字段'B'是否有初值,有就根据这个值去查,没有就抽取全部,这是正常情况,但是当我的选择屏幕有多个字段需要去筛选时,这样写有赋值时可以筛选到值,如果没有赋值,屏幕字段空的时候,就完全取不到值,我想问的是为什么会这样,这个关联是否有问题?如何解决?
本楼点评(0) 收起
回复

使用道具 举报

发表于 2013-6-25 22:04:24 | 显示全部楼层
ronnieshuai 发表于 2013-6-25 21:53
不不不,我说的不是这个条件问题,我说的是正常PARAMETERS声明的选择屏幕使用的条件是WHERE 'A' = 'B',SE ...

可以用OR
本楼点评(0) 收起
回复

使用道具 举报

发表于 2013-6-26 10:54:35 | 显示全部楼层
PARAMETERS声明的变量一般都会设成必输··
本楼点评(0) 收起
回复

使用道具 举报

 楼主| 发表于 2013-6-26 11:23:41 | 显示全部楼层
SAPOK_ABAP 发表于 2013-6-26 10:54
PARAMETERS声明的变量一般都会设成必输··

谢谢,已解决!
本楼点评(0) 收起
回复

使用道具 举报

 楼主| 发表于 2013-6-26 11:24:20 | 显示全部楼层
布拉德与朔太郎 发表于 2013-6-24 23:26
可以在在SELECT语句前加判断。事先判断条件字段是否为空,为空的话,把选择语句的条件去掉。
如:
IF A   ...

谢谢你的帮助,另外想问一下为什么会出现这样的情况呢?
本楼点评(0) 收起
回复

使用道具 举报

发表于 2013-6-26 11:28:39 | 显示全部楼层
ronnieshuai 发表于 2013-6-26 11:24
谢谢你的帮助,另外想问一下为什么会出现这样的情况呢?

如果你的A 为空的话,运行SELECT 语句是 B =  A , 即B = 空,程序会查找B为空且符合其他条件的数据,如果没有,内表就没有数据。
我想你的本意应该是如果A为空的时候,不设其为查询条件。
本楼点评(0) 收起
回复

使用道具 举报

发表于 2013-6-26 11:30:10 | 显示全部楼层
SAPOK_ABAP 发表于 2013-6-26 10:54
PARAMETERS声明的变量一般都会设成必输··

涛哥,非常同意你的观点
本楼点评(0) 收起
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|联系我们|赛跑网 ( 苏ICP备14021163号-4QQfsq

GMT+8, 2026-8-3 18:14 , Processed in 0.241419 second(s), 56 queries .

Powered by 91SAP X3.4

© 2001-2023 91sap Team.

快速回复 返回顶部 返回列表