ABAP SQL捕获活动员工日期范围的记录
pa0000/pa0001中的记录有两条记录,如下所示:ABAP SQL捕获活动员工日期范围的记录,abap,opensql,sap-hr,Abap,Opensql,Sap Hr,pa0000/pa0001中的记录有两条记录,如下所示: 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
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' .
贝格达恩达酒店
[2017年7月3日-1999年12月31日]
[2017年1月3日-2017年7月2日]
选择屏幕的日期范围为:低:2017年7月1日和高:2017年7月31日
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' .
从Pa0001表格中选择数据
选择PERNR
恩达
贝格达
珀格
珀斯克
来自PA0001
进入表T_PA0001
S_PERNR[]中的PERNR在哪里,以及
BEGDA=S_BUDAT-HIGH和
S_EMPGR[]和
S_EMPSG[]和
S_WERKS和
BTRTL='FURC'。
上述两项记录未被捕获
我希望使用“排除所有错误选项”方法重新编写代码,而不是使用当前的方法“登记所有可接受的选项”,如下所示
WHERE NOT ( pa0001-begda > s_budat-high or pa0001-endda < s_budat-low)
不在其中(pa0001 begda>s_budat-high或pa0001 endda
非常感谢您在这方面提供的任何帮助。它可能不起作用,因为
S_BUDAT
是内部表格的标题行S_BUDAT[]
,因此换句话说,它是一个结构。您应该将选择选项S_BUDAT
拆分为两个参数,例如P_LOW
和P_HIGH
,并重新表述您的查询
另一种选择是简单地编写
而不是在S_BUDAT[]
中,它可能不起作用,因为S_BUDAT
是内部表的标题行S_BUDAT[]
,所以换句话说,它是一个结构。您应该将选择选项S_BUDAT
拆分为两个参数,例如P_LOW
和P_HIGH
,并重新表述您的查询
另一种选择是只写
而不写S_BUDAT[]
您现在的选择将只匹配从S_BUDAT-LOW到S_BUDAT-HIGH的所有工作日的员工。从您的问题来看,您实际上希望选择至少有一天在该范围内的所有员工。
要获取最后一个选择,您可以使用:
BEGDA LE S_BUDAT-HIGH AND
ENDDA GE S_BUDAT-LOW
您现在的选择将只匹配在从S_BUDAT-LOW到S_BUDAT-HIGH的所有日期都处于活动状态的员工。从您的问题来看,您实际上希望选择至少有一天在该范围内的所有员工。 要获取最后一个选择,您可以使用:
BEGDA LE S_BUDAT-HIGH AND
ENDDA GE S_BUDAT-LOW