在查询中计算重复行数的最有效方法是什么

时间:2019-04-16 14:52:55

标签: select sap abap infoset

我正在SAP SQ01 / SQ02中创建一个报告,其目的是显示在指定时间范围内选择产品的次数。

数据主要来自表LTAP。我只需要能够计算重复材料XYZ的行数并将其输出到额外的字段中并显示该值。另外,我希望此计数在指定的时间范围内发生,例如在过去30天内,这是为了确保它是最新的并且相关。

下面的代码可以工作,但是太慢了,仅输出一种材料就需要花费几秒钟的时间,而我需要基于该数量的报告来输出前1000名。有没有更有效的方法来完成同一件事?

数据标签

DATA : YEAR(4) TYPE N,
       MTH(2) TYPE N,
       DAY(2) TYPE N,
       YEAR1(4) TYPE N,
       MTH1(2) TYPE N,
       DAY1(2) TYPE N,
       FROM_DATE LIKE SY-DATUM,
       count1 like LTAP-UMREZ.
FIELD-SYMBOLS <fs_dtab> TYPE STANDARD TABLE.
DATA: sort_f1 TYPE fieldname.

初始化标签

sort_f1 = 'ltap-matnr'.

记录处理选项卡

YEAR = SY-DATUM(4).
MTH = SY-DATUM+4(2).
DAY = SY-DATUM+6(2).
IF MTH eq 1.
    MTH1 = MTH + 11.
   ELSE.
    MTH1 = MTH - 1.
 ENDIF.
   IF MTH eq 1.
      YEAR1 = YEAR - 1.
        ELSE.
        YEAR1 = YEAR.
   ENDIF.
FROM_DATE(4) = YEAR1.
FROM_DATE+4(2) = MTH1.
FROM_DATE+6(2) = DAY.

选项卡后选择结束

ASSIGN ('%G00[]') TO <fs_dtab>.
IF <fs_dtab> IS ASSIGNED.
  SORT <fs_dtab> BY (sort_f1)
                 DESCENDING.
  DELETE ADJACENT DUPLICATES FROM <fs_dtab>
  COMPARING (sort_f1).
ENDIF.

附加域代码

在LTAP中,UMREZ字段填充了数字“ 1”,因此我在这里使用它来计算重复项。

clear count.
Select sum( UMREZ ) as UMREZ
  from *LTAP into COUNT
  where *LTAP~MATNR eq LTAP-MATNR
  and *LTAP~QDATU GE from_date.

我希望报告会在几秒钟内发布,而不是几分钟。非常感谢您对替代代码或对当前代码的改进能够实现这一目标。

1 个答案:

答案 0 :(得分:3)

onViewableItemsChanged = ({viewableItems}) => {
  viewableItems.forEach(item => {
    if (item.item.videoGallery) {
      this.props.feedItemIds(item.key)
    }
  })
};

确保DATA materials TYPE RANGE OF matnr. SELECT matnr AS material, COUNT(*) AS count FROM ltap INTO TABLE @DATA(result) WHERE matnr IN materials AND qdatu >= @from_date GROUP BY matnr. 列上有一个索引。在当前的S / 4HANA中,有一个MATNR可以使用,但只能部署在SAP HANA上,而在较早的版本中可能不可用。