繁体   English   中英

ABAP SQL 捕获某个日期范围内在职员工的记录

[英]ABAP SQL capture records of a date range of active employees

pa0000/pa0001中的记录有如下两条记录:

贝格达恩达

[03.07.2017 - 31.12.9999]

[03.01.2017 - 02.07.2017]

选择屏幕具有日期范围:低:01/07/2017 和高: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)

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

它可能不起作用,因为S_BUDAT是带有标题行S_BUDAT[]的内部表的标题,因此换句话说,它是一个结构。 您应该将选择选项S_BUDAT为两个参数,例如。 P_LOWP_HIGH并重新P_HIGH您的查询。

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

您现在的选择将只匹配从 S_BUDAT-LOW 到 S_BUDAT-HIGH 的所有日子都处于活动状态的员工。 从您的问题看来,您实际上想要选择在该范围内至少有一天的所有员工。 要获得最后一个选择,您可以使用:

BEGDA LE S_BUDAT-HIGH AND
ENDDA GE S_BUDAT-LOW

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM