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(classCL\u SQL\u语句
等)或AMDP(如果您的数据库是HANA)完成
不幸的是,在ABAP 7.50之前,我只看到两种可能性:
所有条目
如您所建议
- 直接在连接到ABAP软件的数据库上执行“本机”SQL。这可以通过
EXEC SQL
或ADBC(classCL\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)。答案已编辑,这可能有助于未来的访问者。