如何解决具有不同域的字段的内连接
我有一个看起来像这样的查询:
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 数据,使用转换退出函数,然后使用 FOR ALL ENTRIES
查询获取 LIPS 条目。然后,由于您不能将 SUM
和 GROUP BY
与 FOR ALL ENTRIES
一起使用,因此我需要手动进行求和。
当然,做这一切的工作量并不大,但我很感兴趣,如果有更快的方法来做到这一点,例如在单个查询中?谢谢。
编辑:我们在 7.40
解决方法
不幸的是,我只看到 ABAP 7.50 之前的两种可能性:
-
FOR ALL ENTRIES
如你所愿 - 直接在连接到 ABAP 软件的数据库上执行“原生”SQL。这可以通过
EXEC SQL
或 ADBC(类CL_SQL_STATEMENT
等)或 AMDP(如果您的数据库是 HANA)来完成。
这不是您的版本,但对于 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).
,
如果您在 7.40 上至少有 ehp5,则可以在使用 SUM 的 FOR ALL ENTRIES 的解决方法中使用 CDS 视图。
- 在 OpenSQL 中加入
EKKO
和EKPO
- 使用字段
LIPS
在VGBEL,VGPOS,SUM(ORMNG)
上创建 CDS 视图,前两个字段为GROUP BY
- 使用 FOR ALL Entries 调用此 CDS 视图
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。