2017-09-27 70 views
0

纪录pa0000/pa0001有两个记录如下:ABAP SQL捕获记录

Begda Endda

[2017年3月7日 - 31.12.9999]

[03.01 0.2017 - 2017年7月2日]

选择屏幕上有日期范围:低:2017年1月7日和高:31/07/2017

ABAP代码写为:

Select data from Pa0001 table 
    SELECT PERNR 
     ENDDA 
     BEGDA 
     PERSG 
     PERSK 
    FROM PA0001 
    INTO TABLE T_PA0001 
    WHERE PERNR IN S_PERNR[] AND 
      BEGDA <= S_BUDAT-LOW AND 
      ENDDA >= S_BUDAT-HIGH AND 
      PERSG IN S_EMPGR[] AND 
      PERSK IN S_EMPSG[] AND 
      GSBER IN S_WERKS AND 
     BTRTL = 'FURC' . 

上述两条记录未被捕获。

我想通过使用方法“排除所有错误的选项”而不是现在的方法“征用所有可接受的选项”来重新编写代码,如下所示。

WHERE NOT (pa0001-begda > s_budat-high or pa0001-endda < s_budat-low) 

在这方面的任何帮助将不胜感激。

回答

2

它可能不起作用,因为S_BUDAT是内部表的标题行S_BUDAT[]所以换句话说它是一个结构。您应该将选项S_BUDAT分为两个参数,例如。 P_LOWP_HIGH并更改您的查询。

另一种选择是简单地写NOT IN S_BUDAT[]

0

您现在的选择只会匹配从S_BUDAT-LOW到S_BUDAT-HIGH全天有效的员工。从您的问题看来,您似乎确实希望选择至少在该范围内有一天的所有员工。 要获得最后一个选择,您可以使用: