在ABAP中为所有条目选择vs LOOP SELECT SINGLE

时间:2013-10-09 19:28:00

标签: loops select sap 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.

2 个答案:

答案 0 :(得分:9)

EKBE包含的关键字段多于EBELNEBELP,因此唯一EBELN / EBELP对可以有更多条目。使用SELECT SINGLE,您将无法获得这些额外的条目,而您使用的是FOR ALL ENTRIES。根据您的需要,只有其中一个能为您提供正确的数据集。

答案 1 :(得分:2)

只想添加。 SELECT SINGLE内的LOOP非常糟糕。 如果您需要来自ebeln的{​​{1}} + ebelp,只需将此两个选择到另一个表ekpo中(不要忘记此选择中的lt_ekpo)并将其用于{ {1}}。