Abap 具有不同域的字段上的内部联接

Abap 具有不同域的字段上的内部联接,abap,opensql,Abap,Opensql,我有一个查询,看起来有点像这样: SELECT a~matnr AS material, b~aedat AS date, SUM( c~ormng ) AS dummy INTO TABLE @gt_dummy FROM ekpo AS a INNER JOIN ekko AS b ON b~ebeln = a~ebeln INNER JOIN lips AS c ON c~vgbel = a~ebeln

我有一个查询,看起来有点像这样:

 SELECT a~matnr AS material,
        b~aedat AS date,
        SUM( c~ormng ) AS dummy
    INTO TABLE @gt_dummy
    FROM ekpo AS a
    INNER JOIN ekko AS b
      ON b~ebeln = a~ebeln
    INNER JOIN lips AS c
      ON c~vgbel = a~ebeln
      AND c~vgpos = a~ebelp
    INNER JOIN likp AS d
      ON d~vbeln = c~vbeln
    WHERE a~matnr IN @gr_dummy1
      AND a~werks IN @gr_dummy2
    GROUP BY a~matnr, b~aedat
    ORDER BY a~matnr, b~aedat.
这是行不通的,因为
LIPS-VGPOS
EKPO-EBELP
有不同的域,所以
EBELP
中的“00010”在
VGPOS
中将是“000010”。另一种方法是只获取EKPO数据,使用转换退出函数,然后对所有条目使用
查询来获取LIPS条目。然后,由于您不能将
SUM
groupby
一起用于所有条目
,因此我需要手动进行求和

当然,这并不是一个巨大的工作量,但我很感兴趣,如果有一个更快的方法来做这件事,例如在一个单一的查询?谢谢


编辑:我们使用的是7.40,这不是您的版本,但是对于ABAP>=7.50,有SQL字符串函数,例如
SUBSTRING

 SELECT a~ebeln, a~ebelp, c~vbeln, c~posnr
    FROM ekpo AS a
    INNER JOIN lips AS c
      ON c~vgbel = a~ebeln
      AND substring( c~vgpos, 2, 5 ) = a~ebelp
    INTO TABLE @DATA(gt_dummy).

这不是您的版本,但对于ABAP>=7.50,有一些SQL字符串函数,例如
子字符串

 SELECT a~ebeln, a~ebelp, c~vbeln, c~posnr
    FROM ekpo AS a
    INNER JOIN lips AS c
      ON c~vgbel = a~ebeln
      AND substring( c~vgpos, 2, 5 ) = a~ebelp
    INTO TABLE @DATA(gt_dummy).

不幸的是,在ABAP 7.50之前,我只看到两种可能性:

  • 所有条目
    如您所建议
  • 直接在连接到ABAP软件的数据库上执行“本机”SQL。这可以通过
    EXEC SQL
    或ADBC(class
    CL\u SQL\u语句
    等)或AMDP(如果您的数据库是HANA)完成

    • 不幸的是,在ABAP 7.50之前,我只看到两种可能性:

      • 所有条目
        如您所建议
      • 直接在连接到ABAP软件的数据库上执行“本机”SQL。这可以通过
        EXEC SQL
        或ADBC(class
        CL\u SQL\u语句
        等)或AMDP(如果您的数据库是HANA)完成

      如果您在7.40上至少有ehp5,您可以在解决方案中使用CDS视图来处理所有具有SUM的条目

    • 在OpenSQL中加入
      EKKO
      EKPO
    • 使用字段
      VGBEL、VGPOS、SUM(ORMNG)
      LIPS
      上创建一个CD视图,前两个字段上有
      GROUP BY
    • 调用此CD视图,查看所有条目

    • 如果您在7.40上至少有ehp5,那么您可以在一个解决方案中为所有具有SUM的条目使用CDS视图

    • 在OpenSQL中加入
      EKKO
      EKPO
    • 使用字段
      VGBEL、VGPOS、SUM(ORMNG)
      LIPS
      上创建一个CD视图,前两个字段上有
      GROUP BY
    • 调用此CD视图,查看所有条目

    • 您可以使用7.40版以后的函数,如
      子字符串
      ,但我只能在您指明ABAP版本的情况下准确回答。@SandraRossi我们使用的是7.40版。我应该提到这一点。在这种情况下,concat('0',a~ebelp)=c~vgpos
也可以工作,但我认为这也是从7.50开始的。有两个演示程序,如demo_SQL_FUNCTION_CONCAT、demo_SQL_FUNCTION_STRING,它们显示了SQL字符串函数的可能性,但可能是7.50版附带的。您可以使用7.40版以后的函数,如
SUBSTRING
,但我只能在您指出您的ABAP版本时准确回答。@SandraRossi我们在7.40上。我应该提到这一点。在这种情况下,concat('0',a~ebelp)=c~vgpos也可以工作,但我认为这也是从7.50开始的。有两个演示程序,如demo_SQL_FUNCTION_CONCAT,demo_SQL_FUNCTION_STRING,它显示了SQL字符串函数的可能性,但可能它们“附带”了7.50I复制/粘贴了您的7.40代码,我得到了:“函数”SUBSTRING“未知”。它在7.40中肯定可用吗?对不起,没有。我没有检查。。。它出现在7.50。让我找到另一个解决办法。我忘了提到我没有一个7.40系统来检查解决方案(只有7.52)。答案已编辑,这可能有助于未来的访问者。我复制/粘贴了您的7.40代码,我得到:“子字符串”功能未知。它在7.40中确实可用吗?对不起,没有。我没有检查。。。它出现在7.50。让我找到另一个解决办法。我忘了提到我没有一个7.40系统来检查解决方案(只有7.52)。答案已编辑,这可能有助于未来的访问者。