ABAP SQL捕获记录
问题描述:
纪录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)
在这方面的任何帮助将不胜感激。
答
它可能不起作用,因为S_BUDAT
是内部表的标题行S_BUDAT[]
所以换句话说它是一个结构。您应该将选项S_BUDAT
分为两个参数,例如。 P_LOW
和P_HIGH
并更改您的查询。
另一种选择是简单地写NOT IN S_BUDAT[]
。
答
您现在的选择只会匹配从S_BUDAT-LOW到S_BUDAT-HIGH全天有效的员工。从您的问题看来,您似乎确实希望选择至少在该范围内有一天的所有员工。 要获得最后一个选择,您可以使用: