[英]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_LOW
和P_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.