2017-09-27 68 views
0

紀錄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) 

在這方面的任何幫助將不勝感激。

回答

2

它可能不起作用,因爲S_BUDAT是內部表的標題行S_BUDAT[]所以換句話說它是一個結構。您應該將選項S_BUDAT分爲兩個參數,例如。 P_LOWP_HIGH並更改您的查詢。

另一種選擇是簡單地寫NOT IN S_BUDAT[]

0

您現在的選擇只會匹配從S_BUDAT-LOW到S_BUDAT-HIGH全天有效的員工。從您的問題看來,您似乎確實希望選擇至少在該範圍內有一天的所有員工。 要獲得最後一個選擇,您可以使用: