ABAP基础知识 表关联使用不同内容的字段

前言

如果你写过报表尝试关联LIPS 与 EKPO ,会发现二者关联的行项目字段长度不一致,内容也不一致 , LIPS-VGPOS = 比EKPO-EBELP 多了一个前面的0 (因为VGPOS定义位6位NUM), 所以会多一个前置0.

无法再JOIN 条件中直接写等式关联

本文主要介绍怎么使用不同内容的字段进行表关联

当然前提是这两个字段内容有固定的规律

长度不一致, 但是内容一致的可以直接关联

LIPS&EKPO

后续以LIPS 与 EKPO表关联为例

二者的关联条件如下.

LIPS-VGBEL = EKPO-EBELN

LIPS-VGPOS+1(5) = EKPO-EBELP.( LIPS-VGPOS的后5位=EKPO-EBELP)

ps: 关于几种JOIN的区别示例图

cc697173ba4e5e212624349ecfc80326.png

实现方法

如果你的SAP版本不支持新的ABAP语法.可以使用如下两种方法

  • 间接法

  • 增强法

01

间接法

可以通过自定义表ZTPOSNR建立 5位NUMC与6位NUMC的关系, 该表维护99999条记录

NUMC5    NUMC6

00001     000001

00002     000002

00010     000010

……

关联时通过该表中转一下

LIPS INNER JOIN ZTPOSNR 

ON ZTPOSNR~NUMC6 = LIPS~NUMC5 

INNER JOIN EKPO 

ON EKPO~EBELN = LIPS~VGBEL 

AND EKPO~EBELP = ZTPOSNR~NUMC5

02

增强法

在LIPS中增强字段 ZZEBELP (同EBELP长度) .

在BADI 

LE_SHP_DELIVERY_PROC  

方法 

IF_EX_LE_SHP_DELIVERY_PROC~FILL_DELIVERY_ITEM 中赋值

LIPS-ZZEBELP = LIPS-VGPOS+1(5).

后续关联可以直接用LIPS~ZZEBELP = EKPO~EBELP

新语法

支持ABAP新语法的版本不用这么麻烦. 可以直接用sql 函数实现

测试验证, 这种写法可以成功

        INNER JOIN ekpo AS i ON i~ebeln = p~vgbel AND concat( '0',i~ebelp ) = p~vgpos

这种写法ABAP中不允许,函数只能在等式左边使用.

         INNER JOIN ekpo AS i ON i~ebeln = p~vgbel AND i~ebelp  = right( p~vgpos, 5 )

HANA SQL

HANASQL语句则同时允许两种写法

select a.vbeln,a.posnr,b.ebelp from lips as a inner join ekpo as b on b.mandt = a.mandt and b.ebeln = a.vgbel and b.ebelp = right(a.vgpos,5)

select a.vbeln,a.posnr,b.ebelp from lips as a inner join ekpo as b on b.mandt = a.mandt and b.ebeln = a.vgbel and concat('0',b.ebelp) = a.vgpos

CDS语法

CDS 视图是构造在ABAP于数据库之间,可以通过用CDS视图加工数据,ABAP可以直接访问加工后的数据视图. HANA数据库中也可以直接使用CDS视图. 

CDS中 两个字段关联会报错

1b61eeba65c90e080e9b29ea945fc48c.png

0b8c9ca36fbb917745f65519876895ea.png

可以使用right(a.vgpos,5)

b885a53b7b789740413438e513679029.png

不支持concat 后参与连接

6ce2bc34bd77a0685d767626a8728499.png

总结

新语法的OPEN SQL不再局限于支持所有数据库SQL, (实际上现在的S4/HANA版本似乎只能安装在HANA数据库上), 所以基本上HANA数据库支持的SQL写法, ABAP都能找到对应的语法支持,

但二者并不完全等同,还是有很多HANA SQL支持的写法, ABAP OPEN SQL 不支持.

可以在ABAP中执行NATIVE SQL 语句 来解决ABAP OPEN SQL 不支持的数据库语句,以提高程序的效率.

详见链接

无峰,公众号:ABAP 技巧与实战ABAP基础知识 怎么访问HANA数据库中的其它CATALOG的表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值