簡體   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