簡體   English   中英

使用 ABAP 中的一個或多個 IF 語句進行 SELECT 查詢

[英]SELECT query with one or multiple IF statements in ABAP

我正在開發一個網絡服務。 我有一個這樣的 select 語句(它有更多的字段和 2 個以上的連接,但為了簡單起見):

SELECT acdoca~augbl,
       open_amount,    "I need to add value to this field based on the IF statement below
       acdoca~koart
FROM acdoca
      LEFT JOIN bseg ON acdoca~belnr EQ bseg~belnr
                      AND acdoca~gjahr EQ bseg~gjahr
                      AND acdoca~buzei EQ bseg~buzei
                      AND acdoca~rbukrs EQ bseg~bukrs
INTO table @it_acdoca.

我需要添加這個 IF 語句:

IF bseg-KOART = 'D' or bseg-KOART = 'K' 
    IF acdoca-AUGBL is INITIAL THEN open_amount = DMBTR
        ELSE open_amount = 0
    ENDIF.
ELSE open_amount = 0
ENDIF.

我需要一個不會破壞服務性能的答案。 由於 ACDOCA 和 BSEG 是 SAP 中一些最大的數據庫表。 我嘗試在 SELECT 之后使用 LOOP,然后在該 LOOP 中添加這個 IF 但這完全破壞了性能。

這是 IT_ACDOCA 表之后的樣子

希望得到快速答復。 此致。

DATA: BEGIN OF it_acdoca  OCCURS 0,
        augbl       TYPE acdoca-augbl,
        open_amount TYPE bseg-dmbtr,
        koart       TYPE acdoca-koart.
DATA: END OF it_acdoca.

SELECT acdoca~augbl,
       CASE WHEN bseg~koart NE 'D' AND bseg~koart NE 'K' THEN 0
            WHEN acdoca~augbl IS INITIAL THEN dmbtr
            ELSE 0
       END AS open_amount,
       acdoca~koart
FROM acdoca
      LEFT JOIN bseg ON acdoca~belnr EQ bseg~belnr
                      AND acdoca~gjahr EQ bseg~gjahr
                      AND acdoca~buzei EQ bseg~buzei
                      AND acdoca~rbukrs EQ bseg~bukrs
INTO TABLE @it_acdoca.

如果您的版本不支持CASE,您可以為語句和合並響應准備不同的查詢。 您也可以並行運行這些查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM