选择所有条目与循环选择单个在 ABAP 中



我正在比较SELECT FOR ALL ENTRIESLOOP SELECT SINGLE,结果之间有很大的差异。

有人可以帮助我吗?有什么区别?

SELECT ekko~ebeln
    ekpo~ebelp
    ekko~bstyp
    ekko~bsart
    ekko~lifnr
    ekko~ekgrp
    ekko~aedat
    ekko~knumv
    ekko~zterm
    ekko~zbd1t
    ekpo~matnr
    ekpo~txz01
    ekpo~menge
    ekpo~meins
    ekpo~netpr
    ekpo~peinh
    ekpo~knttp
    ekpo~afnam
    ekpo~wepos
INTO TABLE t_ekpo
FROM ekko
INNER JOIN ekpo ON
    ekpo~ebeln EQ ekko~ebeln
WHERE ekko~lifnr IN s_lifnr
    AND ekko~ekgrp IN s_ekgrp
    AND ekko~ebeln IN s_ebeln
    AND ekko~aedat IN s_aedat
    AND ekko~bsart IN s_bsart
    AND ekko~bstyp EQ 'F'
    AND ekko~loekz EQ space
    AND ekpo~matnr IN s_matnr
    AND ekpo~ebelp IN s_ebelp
    AND ekpo~loekz EQ space.

SELECT FOR ALL ENTRIES 返回 9.528 条记录

SELECT ebeln
    ebelp
    zekkn
    vgabe
    gjahr
    belnr
    buzei
    budat
    menge
    shkzg
FROM ekbe
INTO TABLE t_ekbe
FOR ALL ENTRIES IN t_ekpo
WHERE ebeln EQ t_ekpo-ebeln
    AND ebelp EQ t_ekpo-ebelp
    AND vgabe IN ('1','2').

LOOP SELECT SINGLE 返回 7.336 条记录

LOOP AT t_ekpo INTO gs_ekpo.
    CLEAR gs_ekbe.
    SELECT SINGLE  ebeln
                 ebelp
                 zekkn
                 vgabe
                 gjahr
                 belnr
                 buzei
                 budat
                 menge
                 shkzg
    FROM ekbe
    INTO gs_ekbe
    WHERE ebeln EQ gs_ekpo-ebeln
        AND ebelp EQ gs_ekpo-ebelp
        AND vgabe IN ('1','2').
    APPEND gs_ekbe TO T_ekbe.
ENDLOOP.

EKBE 具有更多键字段,而不仅仅是 EBELNEBELP ,因此唯一 EBELN/EBELP 对可以有更多的条目。有了SELECT SINGLE,您将无法获得这些额外的条目,而您所做的FOR ALL ENTRIES。根据您的需求,只有其中之一才能为您提供正确的数据集。

只是想补充一下。 SELECT SINGLE LOOP里面是非常糟糕的主意。如果您需要ebeln + ebelp ekpo只需将这两个选择到其他表lt_ekpo(不要忘记此选择中的DISTINCT(并将其用于FOR ALL ENTRIES

相关内容

  • 没有找到相关文章

最新更新