Abap 要显示结果列表中的所有行项目而不是最后一行项目吗

Abap 要显示结果列表中的所有行项目而不是最后一行项目吗,abap,Abap,我有一个使用聚合函数groupby的SELECT查询。但是我的程序只显示最后一行项目。我想显示所有行项目 预期结果示例: {"numOfRec":"50", "shipmentsDetails":[ {"orderNum":"1000101730", "deliveryOrderNum":"0085099852", "pro

我有一个使用聚合函数
groupby
的SELECT查询。但是我的程序只显示最后一行项目。我想显示所有行项目

预期结果示例:

{"numOfRec":"50",
 "shipmentsDetails":[
   {"orderNum":"1000101730",
    "deliveryOrderNum":"0085099852",
    "prodCode":"OE8002L18",
    "batchCode":"0000029927",
    "qty":"108.000" } , 
   {"orderNum":"1000101730",
    "deliveryOrderNum":"0085099852",
    "prodCode":"OE8407L18",
    "batchCode":"0000029928",
    "qty":"36.000" } , 
   {"orderNum":"1000101730",
    "deliveryOrderNum":"0085099852",
    "prodCode":"SUE9433G1",
    "batchCode":"0000029923",
    "qty":"180.000" }]}
实际结果示例(在
i_输出中
):

(虽然有许多行项目,但仅显示最后一行项目)

这是我的密码:

  IF NOT i_vttk IS INITIAL.
    SELECT tknum
           tpnum
           vbeln
      FROM vttp
      INTO TABLE i_vttp
      FOR ALL ENTRIES IN i_vttk
      WHERE tknum = i_vttk-tknum.
    IF sy-subrc EQ 0.
      SORT i_vttp BY tknum tpnum.
    ENDIF.

    IF NOT i_vttp is INITIAL.
      LOOP AT i_vttp INTO wa_vttp.
        SELECT vbeln
               matnr
               charg
               SUM( lgmng ) as lgmng
               meins
          FROM lips
          INTO TABLE i_lips
          WHERE vbeln = wa_vttp-vbeln
            AND aedat LE sy-datum
            AND lfimg <> 0
          GROUP BY vbeln matnr charg meins.
        IF sy-subrc EQ 0.
          "APPEND i_lips.
          "CLEAR i_lips.
          SORT i_lips BY vbeln matnr.
        ENDIF.
      ENDLOOP.
    ENDIF.

    LOOP AT i_lips INTO wa_lips.
      READ TABLE i_vttp
            INTO wa_vttp
        WITH KEY vbeln = wa_lips-vbeln.
      IF sy-subrc = 0.
        wa_output-tknum = wa_vttp-tknum.
        wa_output-vbeln = wa_lips-vbeln. " Added Delivery
        wa_output-matnr = wa_lips-matnr.
        wa_output-charg = wa_lips-charg.
        wa_output-lgmng = wa_lips-lgmng.
      ENDIF.
      APPEND wa_output TO i_output.
      CLEAR: wa_vttp, wa_lips, wa_output.
      l_count = l_count + 1.
    ENDLOOP.

任何帮助都将不胜感激。谢谢。

您的代码有几个问题:

  • 循环中的select通常是一个坏主意,因为它会增加数据库访问(您确实不希望这样)。考虑其他选项,如“代码>联接< /代码> .< /P>
  • 之所以只得到最后一行,是因为在每次循环过程中(在进行选择的循环中),内部表i_lips都会被覆盖,因此在退出循环时,只会得到最后选择的条目。要解决此问题,您可以修改select查询,如下所示:

    SELECT vbeln
       matnr
       charg
       SUM( lgmng ) as lgmng
       meins
     FROM lips
     APPENDING TABLE i_lips
     WHERE vbeln = wa_vttp-vbeln
     AND aedat LE sy-datum
     AND lfimg <> 0
     GROUP BY vbeln, matnr, charg, meins.
    
    选择vbeln
    材料
    charg
    总额(lgmng)为lgmng
    梅因
    从嘴唇
    附加表i\u
    其中vbeln=wa_vttp-vbeln
    和伊达·勒西数据
    和lfimg 0
    按vbeln、matnr、charg、meins分组。
    

  • 结果列表:{“numOfRec”:“1”,“shipmentsDetails”:[{“orderNum”:“1000101760”,“deliveryOrderNum”:“0085099889”,“prodCode”:“UE9101G5”,“batchCode”:“20200101E”,“qty”:“10.000”}]}}虽然有许多行项目,但只显示最后一行项目。将
    vttp
    lips
    表格样本放入问题中,与预期结果一起,将vbeln matnr charg lgmng meins从lips中选择到表i_lips中,用于i_vttp中的所有条目,其中vbeln=i_vttp-vbeln和aedat LE sy DATA和lfimg 0。如果sy subrc等式为0。按vbeln matnr对嘴唇进行分类。恩迪夫。总数量之和(字段lgmng)。但是abap不允许使用针对所有条目的聚合函数。因此,我循环内部表。循环后,显示最后一行项目。预期结果:{“numOfRec”:“50”,“shipmentsDetails”:[{“orderNum”:“1000101730”,“deliveryOrderNum”:“0085099852”,“prodCode”:“OE8002L18”,“batchCode”:“0000029927”,“qty”:“108.000”},{“orderNum”:“1000101730”,“deliveryOrderNum”:“0085099852”,“prodCode”:“OE8407L18”,“batchCode”:“0000029928”,“qty”:“36.000”},{“orderNum”:“1000101730”,“deliveryOrderNum”:“0085099852”,“产品代码”:“SUE9433G1”,“批次代码”:“0000029923”,“数量”:“180.000”}@HninWaiMarSoe您可以编辑您自己的问题以提高其清晰度;这比只使用注释要好。我是为您做的。谢谢Dan K。我对abap非常陌生。我想知道一件事。我如何声明@wa_vttp和@sy datum?错误消息“当转义时,所有主机变量都必须使用@转义。“我已经在asnwer中修复了它,我按照您所说的删除了“@”。没有结果。从lips附加表I_lips中选择vbeln matnr charg SUM(lgmng)作为lgmng meins,其中vbeln=wa_vttp-vbeln和aedat LE sy DATA,并通过vbeln matnr charg meins对lfimg 0进行分组。结果:{“numOfRec”:“0”,“shipmentsDetails”:[]]从lips附加表i_lips中选择vbeln matnr charg SUM(lgmng)作为lgmng MEIN,其中vbeln=i_vttp-vbeln和aedat LE sy DATA,并按vbeln matnr charg MEIN将lfimg 0分组。尝试使用i_vttp-vbeln时,显示错误消息“字段i_vttp-vbeln”未知@HninWaiMarSoe虽然您说更正后的程序没有按预期工作,但我认为Dan K已经回答了您的问题(使用
    中添加
    ,而不是
    )。我建议您投票,如果回答了实际问题,则mark Dan K回答为已接受。对于其他问题,值得提出一个新问题,或者如果您需要有关代码的一般帮助,我建议您访问或之类的网站。
    
    SELECT vbeln matnr charg SUM( lgmng ) as lgmng meins 
      FROM lips 
      INTO TABLE i_lips 
      FOR ALL ENTRIES IN i_vttp 
      WHERE vbeln = i_vttp-vbeln 
        AND aedat LE sy-datum 
        AND lfimg <> 0
      GROUP BY vbeln matnr charg meins. 
    
    SELECT vbeln
       matnr
       charg
       SUM( lgmng ) as lgmng
       meins
     FROM lips
     APPENDING TABLE i_lips
     WHERE vbeln = wa_vttp-vbeln
     AND aedat LE sy-datum
     AND lfimg <> 0
     GROUP BY vbeln, matnr, charg, meins.